Documentation
¶
Index ¶
- func AddFunc(s string, f func()) (*crontab.Future, error)
- func BaseExport() base.BaseExport
- func CoreCache() cache.CoreCache
- func EnableExport(export export.Export)
- func EnablePlugin(name string, plugin plugin.Plugin)
- func Export(deviceData []plugin.DeviceData)
- func GetMetadata() config.Metadata
- func Log() *zap.Logger
- func ReadPoint(deviceId string, pointName string) error
- func ReadPoints(deviceId string, pointData []plugin.PointData) error
- func ReloadPlugin(pluginName string)
- func ReloadPlugins()
- func Shadow() shadow0.DeviceShadow
- func Start() error
- func Stop() error
- func TriggerEvents(eventCode event.EventCode, key string, value interface{})
- func UpdateMetadata(f func(*config.Metadata))
- func WritePoint(deviceId string, pointData plugin.PointData) error
- func WritePoints(deviceId string, pointData []plugin.PointData) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AddFunc ¶
AddFunc 添加定时任务 参数:
- s: cron表达式,定义任务执行的时间计划 支持标准cron格式: 秒 分 时 日 月 星期 示例: "* * * * *" 每分钟执行, "0 0 * * *" 每天零点执行
- f: 需要执行的任务函数,无参数无返回值
返回值:
- *crontab.Future: 定时任务的Future对象,可用于取消任务或查询状态
- error: 操作过程中发生的错误,如cron表达式格式错误等
使用示例:
future, err := driverbox.AddFunc("0 */5 * * * *", func() {
driverbox.Log().Info("定时任务执行")
})
if err != nil {
driverbox.Log().Error("添加定时任务失败", zap.Error(err))
}
func BaseExport ¶
func BaseExport() base.BaseExport
BaseExport 获取基础导出模块实例 基础导出模块提供标准的API接口和其他基本导出功能 返回值:
- base.BaseExport: 基础导出模块实例,可用来注册自定义API、配置服务等
使用示例:
baseExport := driverbox.BaseExport()
// 注册自定义API接口
// baseExport.RegisterAPI("/custom/api", handler)
// 配置HTTP服务器参数
// baseExport.SetHTTPConfig(config)
func CoreCache ¶
CoreCache 获取核心缓存实例 提供对系统核心缓存的访问,用于存储和检索运行时数据 核心缓存包含设备配置、点位信息、模型定义等关键数据 返回值:
- cache.CoreCache: 核心缓存实例,可通过该实例访问设备、点位、模型等信息
使用示例:
cache := driverbox.CoreCache()
devices := cache.Devices()
device, exists := cache.GetDevice("device001")
func EnableExport ¶
EnableExport 注册Export至driver-box 该函数将实现了Export接口的模块注册到系统中 如果相同的Export实例已存在,则不会重复注册 参数:
- export: 实现了export.Export接口的导出模块实例
使用示例:
type CustomExport struct{}
func (c *CustomExport) Init() error { return nil }
func (c *CustomExport) ExportTo(deviceData plugin.DeviceData) {}
func (c *CustomExport) OnEvent(eventCode event.EventCode, key string, eventValue interface{}) error { return nil }
func (c *CustomExport) IsReady() bool { return true }
func (c *CustomExport) Destroy() error { return nil }
customExport := &CustomExport{}
driverbox.EnableExport(customExport)
func EnablePlugin ¶
EnablePlugin 注册插件到系统中 这是外部插件启用的主要入口点 参数:
- name: 插件名称,必须唯一,建议使用协议名称
- plugin: 实现了 plugin.Plugin 接口的插件实例
使用示例:
func init() {
driverbox.EnablePlugin("modbus", &modbus.Plugin{})
}
func Export ¶
func Export(deviceData []plugin.DeviceData)
Export 导出设备数据到各个Export插件 这是设备数据导出的核心函数,负责将设备数据分发到所有已注册的Export模块 参数:
- deviceData: 设备数据数组,包含设备ID、数值、事件等信息 每个DeviceData包含: ID(设备ID), Values(点位值数组), Events(事件数组), ExportType(导出类型)
处理流程:
- 记录调试日志
- 触发插件回调事件(event.DoExport)
- 遍历每个设备数据: - 如果设备有事件,则触发事件通知 - 对点位数据进行缓存过滤(根据报告模式过滤不变的点位值) - 如果设备没有数值数据则跳过 - 将数据导出到所有已准备好的Export插件
数据过滤机制:
- 根据报告模式过滤不变的点位值(ReportMode_Change)
- 缓存点位值以检测变化
- 触发预处理事件(event.Exporting)
func GetMetadata ¶
GetMetadata 获取服务元数据信息 返回当前服务的核心元数据配置,包括序列号、版本等关键信息 返回值:
- config.Metadata: 当前服务的元数据配置副本
使用示例:
metadata := driverbox.GetMetadata()
driverbox.Log().Info("Service Serial Number", zap.String("serial", metadata.SerialNo))
driverbox.Log().Info("Service Version", zap.String("version", metadata.Version))
func Log ¶
Log 获取日志记录器实例 返回系统默认的zap日志记录器,用于记录系统运行时的各种日志信息 该记录器已经过初始化配置,可以直接使用
返回值:
- *zap.Logger: 预配置的zap日志记录器实例,支持结构化日志记录
使用示例:
driverbox.Log().Info("Service started", zap.String("version", "1.0.0"))
driverbox.Log().Error("Failed to connect", zap.Error(err))
driverbox.Log().Debug("Debug information", zap.Any("data", data))
func ReadPoint ¶
ReadPoint 触发对指定设备点位的读取操作 该函数会将读取指令下发到驱动层 参数:
deviceId: 设备唯一标识符 pointName: 需要读取的点位名称
返回值:
error: 操作过程中发生的错误,如设备不存在、点位不存在、通信失败等
使用示例:
err := driverbox.ReadPoint("device001", "temperature")
if err != nil {
driverbox.Log().Error("Read point failed", zap.Error(err))
}
func ReadPoints ¶
ReadPoints 批量读取多个设备点位 该函数会将批量读取指令下发到驱动层 参数:
deviceId: 设备唯一标识符 pointData: 包含多个点位名称的数组
返回值:
error: 操作过程中发生的错误,如设备不存在、部分点位不存在、通信失败等
使用示例:
points := []plugin.PointData{
{PointName: "temperature"},
{PointName: "humidity"},
}
err := driverbox.ReadPoints("device001", points)
if err != nil {
driverbox.Log().Error("Batch read points failed", zap.Error(err))
}
func ReloadPlugin ¶
func ReloadPlugin(pluginName string)
ReloadPlugin 重启指定名称的插件 先调用插件的 Destroy 方法释放资源,然后使用原始配置重新初始化 参数:
- pluginName: 需要重启的插件名称
重启流程:
- 获取插件的原始配置
- 调用插件的Destroy方法释放资源
- 使用原始配置重新调用Initialize方法
此函数主要用于热重载插件配置或修复插件状态异常
func ReloadPlugins ¶
func ReloadPlugins()
ReloadPlugins 重启所有已注册的插件 依次对每个插件调用 ReloadPlugin 函数
重启流程:
- 遍历所有已注册的插件名称
- 对每个插件调用ReloadPlugin方法
此函数主要用于系统级别的插件批量重启,例如在全局配置变更后
func Shadow ¶
func Shadow() shadow0.DeviceShadow
Shadow 获取设备影子服务实例 设备影子服务用于维护设备状态,提供状态同步和监控功能 设备影子服务提供以下功能: 1. 设备状态持久化 - 保存设备最新状态 2. 在离线状态监控 - 跟踪设备连接状态 3. 点位值缓存 - 缓存设备点位的最新值 4. 控制指令存储 - 记录下发给设备的控制指令
返回值:
- shadow0.DeviceShadow: 设备影子服务实例,提供设备状态管理的完整接口
使用示例:
shadowService := driverbox.Shadow()
shadowService.AddDevice("device001", "temp_sensor")
value, err := shadowService.GetDevicePoint("device001", "temperature")
if err != nil {
driverbox.Log().Error("Get device point failed", zap.Error(err))
}
status, err := shadowService.IsOnline("device001")
if err != nil {
driverbox.Log().Error("Check device online status failed", zap.Error(err))
}
func Start ¶
func Start() error
Start 启动driver-box服务 该函数执行完整的启动流程,包括: 1. 初始化环境配置 2. 初始化日志记录器 3. 启动所有Export模块 4. 启动所有插件 5. 触发服务状态事件 返回值:
error: 启动过程中发生的任何错误,如配置加载失败、端口占用等
使用示例:
if err := driverbox.Start(); err != nil {
driverbox.Log().Fatal("Failed to start driver-box", zap.Error(err))
}
func Stop ¶
func Stop() error
Stop 停止driver-box服务 该函数执行完整的停止流程,包括: 1. 清理所有定时器任务 2. 销毁所有Export模块 3. 销毁所有插件 4. 重置影子服务 5. 清除核心缓存数据 返回值:
error: 停止过程中发生的任何错误(当前总是返回nil)
使用示例:
if err := driverbox.Stop(); err != nil {
driverbox.Log().Error("Error stopping driver-box", zap.Error(err))
}
func TriggerEvents ¶
TriggerEvents 触发事件通知到所有已加载的Export插件 参数:
- eventCode: 事件代码,标识事件类型 常见事件类型: event.DeviceDiscover(设备发现), event.SceneTrigger(场景触发), event.ServiceStatus(服务状态变更), event.Exporting(导出前事件)等
- key: 事件关联的键值,通常是设备ID、服务序列号或其他唯一标识
- value: 事件携带的数据值,可以是任意类型的数据
功能:
遍历所有已加载的Export插件,调用其OnEvent方法处理事件 如果Export插件未就绪,则跳过该插件 记录事件处理过程中的错误信息
注意事项:
- 此函数会并发调用各个Export插件的OnEvent方法
- 单个插件处理失败不影响其他插件的处理
func UpdateMetadata ¶
UpdateMetadata 更新服务元数据信息 允许动态修改服务的元数据配置,如序列号、版本等信息 参数:
- f: 用于修改元数据的函数,接收元数据指针作为参数 通过此函数可以安全地修改元数据字段
使用示例:
driverbox.UpdateMetadata(func(metadata *config.Metadata) {
metadata.SerialNo = "new_serial_no"
metadata.Version = "2.0.0"
})
func WritePoint ¶
WritePoint 触发对指定设备点位的写入操作 该函数会将写入指令下发到驱动层 参数:
deviceId: 设备唯一标识符 pointData: 包含点位名称和值的结构体
返回值:
error: 操作过程中发生的错误,如设备不存在、点位不存在、值类型错误、通信失败等
使用示例:
data := plugin.PointData{
PointName: "switch",
Value: true,
}
err := driverbox.WritePoint("device001", data)
if err != nil {
driverbox.Log().Error("Write point failed", zap.Error(err))
}
func WritePoints ¶
WritePoints 批量写入多个设备点位 该函数会将批量写入指令下发到驱动层 参数:
deviceId: 设备唯一标识符 pointData: 包含多个点位名称和值的数组
返回值:
error: 操作过程中发生的错误,如设备不存在、部分点位不存在、值类型错误、通信失败等
使用示例:
points := []plugin.PointData{
{PointName: "switch1", Value: true},
{PointName: "switch2", Value: false},
}
err := driverbox.WritePoints("device001", points)
if err != nil {
driverbox.Log().Error("Batch write points failed", zap.Error(err))
}
Types ¶
This section is empty.