news 2026/9/26 4:55:25

AIS 数据采集器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AIS 数据采集器

AIS 数据采集器搭建全流程

日期:2026-09-25

项目路径:C:\ais_project

MQTT 服务器:

TDengine 数据库:ais


基于TDengine的数据库存储,将从mqttx收到的数据存入超级表中,并根据唯一ID创建子表存储,便于查询数据。

一、环境准备

写在最开始,默认已经安装好TDengine/Pycharm/MQTTX

1.1 安装依赖

pip install paho-mqtt taospy

1.2 确认 TDengine

Windows:检查 taosd 服务是否运行

可以打开 Windows 服务管理器,或按 Win+R 输入 services 打开服务窗口,检查 taosd 服务是否正在运行。

1.3 创建数据库

进入 taos CLI:

taos

执行 SQL:

CREATE DATABASE IF NOT EXISTS ais; USE ais;


二、建表

2.1 创建四张超级表

-- 动态表

CREATE STABLE st_dynamic ( ts TIMESTAMP, lon DOUBLE, lat DOUBLE, sog FLOAT, cog FLOAT, heading FLOAT, nav_status INT ) TAGS ( segment NCHAR(16), mmsi BIGINT );

-- 静态表

CREATE STABLE st_static ( ts TIMESTAMP, ship_name NCHAR(64), imo NCHAR(32), call_sign NCHAR(32), ship_type INT ) TAGS ( segment NCHAR(16), mmsi BIGINT );

-- 航次表

CREATE STABLE st_sail ( ts TIMESTAMP, event_type NCHAR(32), status NCHAR(32) ) TAGS ( segment NCHAR(16), mmsi BIGINT );

-- 状态/错误日志表

CREATE STABLE st_status ( ts TIMESTAMP, level NCHAR(16), source NCHAR(32), err_msg NCHAR(512) ) TAGS ( segment NCHAR(16), mmsi BIGINT );

2.2 验证建表结果

SHOW STABLES;

预期输出四行:st_dynamic、st_static、st_sail、st_status


三、部署采集器

3.1 创建采集器文件

在 C:\ais_project 或者{你想存放的文件夹}下新建 ais_collector.py

3.2 配置连接信息

TD_CONFIG = {
"host": "localhost",
"user": "root",
"password": "taosdata",
"database": "ais"
}

MQTT_CONFIG = {
"host": "服务器地址",
"port": 1883,
"user": "",
"password": "",
"topics": [
订阅主题
]
}

3.3 启动采集器

1.cmd命令行中输入cd C:\ais_project python ais_collector.py

2.或者在Pycharm项目文件夹中打开于终端,输入python ais_collector.py

正常启动后日志示例:

2026-09-25 17:05:00 | INFO | TDengine 连接成功 2026-09-25 17:05:00 | INFO | MQTT 连接成功 [接收] Topic=topic | 数据=413772468,2026-09-25 17:05:28,107.100860000,29.769935000,291,511,74,15,-128,0,2,238660,238650= [动态] MMSI=413772468 | 写入成功 | 类型=dynamic


四、常见问题与解决方案

问题1:MQTT 连接失败 [WinError 10061]

原因:MQTT 服务器地址或端口配置错误

解决:检查 MQTT_CONFIG 中的 host 和 port,确认用户名密码正确

问题2:JSON 解析失败 Extra data

原因:数据是 CSV 格式,不是 JSON

解决:已使用 CSV 解析方式,无需处理

问题3:Invalid column name

原因:INSERT 语句中的列名与表结构不匹配

解决:用 DESCRIBE st_xxx; 查看表结构,对齐列名

问题4:Table does not exist

原因:超级表未创建

解决:执行第二章的建表语句

问题5:统计在线船舶数不准

原因:COUNT(DISTINCT tbname) 在 TDengine 中行为不可靠

解决:改用 COUNT(DISTINCT mmsi),mmsi 是 TAG,统计准确

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 4:54:47

RESTful API设计灵魂:Roy Fielding六大约束与CRUD思维辨析

你接手过一个号称“RESTful”的老接口吗?点开代码,清一色的POST /api/getXXX、POST /api/updateXXX,问就是“REST 不就是增删改查嘛,用 HTTP 方法对应 CRUD 不就完事了”。这个误读太普遍了,导致很多人把 REST 当成一种…

作者头像 李华
网站建设 2026/9/26 4:54:41

Frida工业级封装:构建安卓逆向作战系统

1. “次元剑”不是新工具,而是逆向工程师的作战系统思维“次元剑”这三个字最近在逆向工程和渗透测试圈子里高频出现,但它压根不是某个开源项目仓库里能git clone下来的独立软件——它没有GitHub star数,没有官方文档站,也没有安装…

作者头像 李华
网站建设 2026/9/26 4:53:24

MES基础业务考核试题解析:ISA-95、BOM与数据模型实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 4:52:54

Unity内置渲染管线屏幕高斯模糊后处理:Shader实现与避坑指南

刚看到这个问题的时候,我第一反应是“这不就是个后处理嘛,网上模板一大把”。但真到自己动手在Unity 内置渲染管线(Built-in Render Pipeline)里把屏幕模糊 Shader 调顺溜,还是有不少容易踩的细节。尤其这几天群里好几…

作者头像 李华
网站建设 2026/9/26 4:51:35

FreeRouting开源PCB自动布线工具:从原理到实战的完整指南

1. 为什么我要认真聊聊FreeRouting这个开源布线工具画PCB这件事,说到底是电子工程师的日常。但凡是做过板子的人都知道,布局布线是整个流程里最磨人的环节——尤其是当你面对一块几百个网络的板子,手动一根根拉线,眼睛都快看花了。…

作者头像 李华
网站建设 2026/9/26 4:51:06

域名注册和域名解析要分清:网站搭建全流程与打不开问题排查

做网站这些年,我见过最多一类问题就是:域名也买了、代码也上传了、服务器也搭好了,但打开浏览器输入域名就是打不开、报无法访问的错。仔细一查,十有八九是把域名注册和域名解析这两件事搞混了。注册是花钱把名字“买下来”&#…

作者头像 李华