driverbox

package
v2.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 29, 2026 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddFunc

func AddFunc(s string, f func()) (*crontab.Future, error)

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

func CoreCache() cache.CoreCache

CoreCache 获取核心缓存实例 提供对系统核心缓存的访问,用于存储和检索运行时数据 核心缓存包含设备配置、点位信息、模型定义等关键数据 返回值:

  • cache.CoreCache: 核心缓存实例,可通过该实例访问设备、点位、模型等信息

使用示例:

cache := driverbox.CoreCache()
devices := cache.Devices()
device, exists := cache.GetDevice("device001")

func EnableExport

func EnableExport(export export.Export)

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

func EnablePlugin(name string, plugin plugin.Plugin)

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(导出类型)

处理流程:

  1. 记录调试日志
  2. 触发插件回调事件(event.DoExport)
  3. 遍历每个设备数据: - 如果设备有事件,则触发事件通知 - 对点位数据进行缓存过滤(根据报告模式过滤不变的点位值) - 如果设备没有数值数据则跳过 - 将数据导出到所有已准备好的Export插件

数据过滤机制:

  • 根据报告模式过滤不变的点位值(ReportMode_Change)
  • 缓存点位值以检测变化
  • 触发预处理事件(event.Exporting)

func GetMetadata

func GetMetadata() config.Metadata

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

func Log() *zap.Logger

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

func ReadPoint(deviceId string, pointName string) error

ReadPoint 触发对指定设备点位的读取操作 该函数会将读取指令下发到驱动层 参数:

deviceId: 设备唯一标识符
pointName: 需要读取的点位名称

返回值:

error: 操作过程中发生的错误,如设备不存在、点位不存在、通信失败等

使用示例:

err := driverbox.ReadPoint("device001", "temperature")
if err != nil {
    driverbox.Log().Error("Read point failed", zap.Error(err))
}

func ReadPoints

func ReadPoints(deviceId string, pointData []plugin.PointData) error

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

func TriggerEvents(eventCode event.EventCode, key string, value interface{})

TriggerEvents 触发事件通知到所有已加载的Export插件 参数:

  • eventCode: 事件代码,标识事件类型 常见事件类型: event.DeviceDiscover(设备发现), event.SceneTrigger(场景触发), event.ServiceStatus(服务状态变更), event.Exporting(导出前事件)等
  • key: 事件关联的键值,通常是设备ID、服务序列号或其他唯一标识
  • value: 事件携带的数据值,可以是任意类型的数据

功能:

遍历所有已加载的Export插件,调用其OnEvent方法处理事件
如果Export插件未就绪,则跳过该插件
记录事件处理过程中的错误信息

注意事项:

  • 此函数会并发调用各个Export插件的OnEvent方法
  • 单个插件处理失败不影响其他插件的处理

func UpdateMetadata

func UpdateMetadata(f func(*config.Metadata))

UpdateMetadata 更新服务元数据信息 允许动态修改服务的元数据配置,如序列号、版本等信息 参数:

  • f: 用于修改元数据的函数,接收元数据指针作为参数 通过此函数可以安全地修改元数据字段

使用示例:

driverbox.UpdateMetadata(func(metadata *config.Metadata) {
    metadata.SerialNo = "new_serial_no"
    metadata.Version = "2.0.0"
})

func WritePoint

func WritePoint(deviceId string, pointData plugin.PointData) error

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

func WritePoints(deviceId string, pointData []plugin.PointData) error

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.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL