跳到主要内容

OpenSynaptic API 参考

语言: English | 中文
最后更新: 2026-04-04

当前在存储库中实现的 API 和服务合约。

深度参考


OpenSynaptic — 顶级协调器

位置:src/opensynaptic/core/pycore/core.py(通过 opensynaptic.core 导出)

主要协调器。实例化它会从 Config.json 连接所有子系统。

构造函数

OpenSynaptic(config_path: str | None = None)
参数类型说明
config_pathstr | NoneConfig.json 的可选路径(绝对或相对)。如果 NoneOSContext 自动检测项目根并加载默认配置。

关键属性

属性类型说明
configdict加载的 Config.json 内容
config_pathstr实例使用的活跃配置路径
base_dirstr项目根目录
assigned_idint | None当前设备 ID(4294967295 = 未分配)
device_idstr人类可读的设备标识符
standardizerOpenSynapticStandardizer标准化子系统
engineOpenSynapticEngineBase62 压缩子系统
fusionOSVisualFusionEngine二进制数据包编码/解码子系统
protocolOSHandshakeManagerCMD 分发和会话管理器
id_allocatorIDAllocator服务器端 ID 池管理器
transporter_managerTransporterManager可插拔传输器注册表
active_transportersdict[str, driver]当前启用的传输驱动程序
service_managerServiceManager插件挂载/生命周期管理器
db_managerDatabaseManager | NoneSQL 引擎(如果配置)

主要方法

ensure_id(server_ip, server_port, device_meta=None, timeout=5.0) → bool

通过 UDP 从服务器请求 uint32 设备 ID(CMD.ID_REQUEST)。
将分配的 ID 持久化回 Config.json
成功获得 ID 或已存在时返回 True

参数类型默认值说明
server_ipstr必需服务器主机名或 IP
server_portint必需UDP 服务器端口
device_metadict | NoneNone随请求一起发送的可选元数据
timeoutfloat5.0套接字超时(秒)

ensure_time(server_ip=None, server_port=None, timeout=3.0) → int | None

将本地时钟与服务器的 UNIX 时间戳同步。
返回服务器时间戳(int)或失败时返回 None

transmit(sensors, device_id=None, device_status='ONLINE', **kwargs) → tuple[bytes, int, str]

完整管道:标准化 → 压缩 → 融合为二进制数据包。
如果 assigned_id 未设置,抛出 RuntimeError

参数类型说明
sensorslist[list][[sensor_id, status, value, unit], ...]
device_idstr | None覆盖设备标识符(默认为 self.device_id
device_statusstr设备状态字符串,例如 "ONLINE"

返回 (binary_packet, assigned_id, strategy_label) 其中 strategy_label"FULL_PACKET""DIFF_PACKET"

dispatch(packet, medium=None) → bool

通过指定的传输介质分发数据包。

参数类型说明
packetbytes二进制数据包
mediumstr | None传输方式("UDP""TCP""MQTT" 等);如果 None,使用 Config.json 默认值

OpenSynapticStandardizer — UCUM 标准化

将所有传感器读数转换为统一的 UCUM 单位。

standardizer = node.standardizer
standardized = standardizer.standardize(sensors, **options)
# 返回标准化的传感器列表

OpenSynapticEngine — Base62 压缩

利用 Base62 编码压缩传感器数据。

engine = node.engine
compressed = engine.compress(standardized_data)
# 返回压缩的 Base62 字符串或字节

OSVisualFusionEngine — 二进制打包和融合

将标准化和压缩的数据融合成高效的二进制数据包。

fusion = node.fusion
packet, metadata = fusion.run_engine(compressed_data, device_meta)
# 返回 (binary_packet, metadata_dict)

支持两种策略:

  • FULL_PACKET: 完整数据快照
  • DIFF_PACKET: 仅变化的字段(增量更新)

TransporterManager — 可插拔传输

发现、加载和管理传输驱动程序。

manager = node.transporter_manager
manager.list_drivers() # 列出可用驱动程序
manager.enable("udp") # 启用 UDP 传输
manager.disable("mqtt") # 禁用 MQTT 传输
manager.send(packet, medium="udp")

使用示例

最小化示例

from opensynaptic.core import OpenSynaptic

node = OpenSynaptic()
node.ensure_id("192.168.1.100", 8080)

sensors = [
["temperature", "OK", 23.5, "degC"],
["humidity", "OK", 65.0, "%RH"],
]

packet, aid, strategy = node.transmit(sensors=sensors)
print(f"发送完成:{len(packet)} 字节,策略:{strategy}")

node.dispatch(packet, medium="UDP")

使用多个传输

from opensynaptic.core import OpenSynaptic

node = OpenSynaptic()

# 通过 UDP 和 MQTT 同时分发
for medium in ["UDP", "MQTT"]:
success = node.dispatch(packet, medium=medium)
print(f"{medium}: {'成功' if success else '失败'}")

核心管理

from opensynaptic.core import get_core_manager

manager = get_core_manager()

# 列出可用核心
print(manager.available_cores())

# 切换到 Rust 核心
manager.set_active_core('rscore')

# 获取 OpenSynaptic 类
OpenSynaptic = manager.get_symbol('OpenSynaptic')
node = OpenSynaptic()

环境变量

变量说明示例
OPENSYNAPTIC_CORE强制活跃核心OPENSYNAPTIC_CORE=rscore
OPENSYNAPTIC_CONFIG强制 Config.json 路径OPENSYNAPTIC_CONFIG=/etc/opensynaptic.json

异常

异常原因
RuntimeError未设置设备 ID 或核心加载失败
ValueError配置验证失败或参数类型错误
OSError文件系统访问错误

CMD 字节常数(CMD 类)

常数说明
DATA_FULL0x3F完整有效负载(模板 + 数据)
DATA_FULL_SEC0x40完整有效负载,XOR 加密
DATA_DIFF0xAA差异更新(仅更改的槽)
DATA_DIFF_SEC0xAB差异,XOR 加密
DATA_HEART0x7F心跳(无值变化)
DATA_HEART_SEC0x80心跳,XOR 加密
ID_REQUEST0x01节点请求设备 ID
ID_ASSIGN0x02服务器分配设备 ID
ID_POOL_REQ0x03节点请求一批 ID
ID_POOL_RES0x04服务器批量 ID 分配
HANDSHAKE_ACK0x05正向确认
HANDSHAKE_NACK0x06反向确认
PING0x09活跃性探测
PONG0x0A活跃性回复
TIME_REQUEST0x0B节点请求服务器时间戳
TIME_RESPONSE0x0C服务器返回 UNIX 时间戳
SECURE_DICT_READY0x0D服务器确认密钥交换
SECURE_CHANNEL_ACK0x0E节点确认加密通道

策略方法

方法返回值说明
get_strategy(src_aid, has_template)str返回 "FULL_PACKET""DIFF_PACKET"
commit_success(src_aid)None增加成功发送计数器
commit_failure(src_aid)None增加失败发送计数器
session_handshake_ack(src_aid, remote_addr)dict开始握手、返回初始化数据
session_handshake_nack(src_aid, reason)None拒绝握手请求
control_packet_from_cmd(cmd_byte, payload)bytes从 CMD 字节和有效负载构造完整数据包
control_packet_to_cmd(packet_bytes)tuple(bytes, bytes)解析数据包为(CMD 字节,有效负载)
session_close(src_aid)None终止设备会话

更多信息


语言: English | 中文
最后更新: 2026-04-04