vei-driver-sdk-go

module
v1.1.13 Latest Latest
Warning

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

Go to latest
Published: Jul 5, 2024 License: Apache-2.0

README

vei-driver-sdk-go

GitHub Actions Workflow Status GitHub go.mod Go version GitHub License GitHub Release

欢迎使用边缘智能驱动开发SDK for Golang,本文档为您介绍如何开发一个自定义驱动

边缘智能产品主页

驱动开发步骤

1. 程序入口
package main

func main() {
    d := &driver.MinimalDriver{}
    vei.Bootstrap("device-minimal", "0.0.1", d)
}
1. 必备接口
type MinimalDriver struct {
    logger  logger.Logger
    asyncCh chan<- *contracts.AsyncValues
}

/**
 *  初始化接口: 程序启动时被调用一次
 *  @param lc:              logger客户端
 *  @param asyncCh:         原生的异步数据上报通道
 */
func (m *MinimalDriver) Initialize(logger logger.Logger, asyncCh chan<- *contracts.AsyncValues) error {
    m.logger = logger
    m.asyncCh = asyncCh
    // 其他必要的初始化过程
    ...
    return nil
}

/**
 *  数据读取接口: 根据设置的采样周期定时调用,或通过在线调试主动调用
 *  @param device:          设备,包含了设备名称和通信协议内容
 *  @param reqs:            请求列表,每个请求中包含属性标识符和点表定义
 */
func (m *MinimalDriver) ReadProperty(device *contracts.Device, reqs []contracts.ReadRequest) error {
	// 通过 device.Name 或 device.Protocols 和设备建立连接,如果连接失败,可手动更新设备状态。
    if err := createConnectionWith(device);err != nil{
        device.SetOperatingState(state, reason)
    }
	
    for _, req := range reqs {
        // 根据请求中携带的模块、属性名、类型等参数访问设备获取数据
        value, err := readProperty(device, req)
        ...
		
        if err != nil {
            // 返回读取的结果
            req.SetResult(contracts.NewSimpleResult(value))
        } else {
            // 或者返回失败内容
            req.Failed(err)			
        }
    }
	return nil
}

/**
 *  数据写入接口: 通过在线调试主动调用
 *  @param device:          设备,包含了设备名称和通信协议内容
 *  @param reqs:            请求列表,每个请求中包含属性标识符和点表定义,以及写入的参数
 */
func (m *MinimalDriver) WriteProperty(device *contracts.Device, reqs []contracts.WriteRequest) error {
    for idx, req := range reqs {
        param := req.Param()
        // 根据 req 和 param 向设备写入数据
        ...
    }
    return nil
}

/**
 *  服务调用接口: 通过在线调试主动调用
 *  @param device:          设备,包含了设备名称和通信协议内容
 *  @param reqs:            请求列表,每个请求中包含了服务的标识符和相关定义,以及调用的参数
 */
func (m *MinimalDriver)  CallService(device *contracts.Device, reqs []contracts.CallRequest) error {
    type Request struct {
        X float32 `json:"x"`
        Y float32 `json:"y"`
    }
    
    type Response struct {
        Result float32 `json:"result"`
    }
    
    request, response := &Request{}, &Response{}
    if err := json.Unmarshal(req.Payload(), request); err != nil {
        return nil, err
    }
    
    // 根据请求内容调用对应的Service
    ...
    
    // 返回调用结果
    req.SetResult(contracts.NewSimpleResult(response))

    return nil
}

/**
 *  停止运行接口: 程序关闭前被调用一次
 *  @param force:           是否强制停止
 */
func (m *MinimalDriver) Stop(force bool) error {
    return nil
}
2. 系统事件接口
/**
 *  添加设备回调函数: 成功添加设备时调用一次
 *  @param device:      设备实例
 */
func (m *MinimalDriver) AddDevice(device *contracts.Device) error error {}
/**
 *  更新设备回调函数: 成功更新设备时调用一次
 *  @param device:      设备实例
 */
func (m *MinimalDriver) UpdateDevice(device *contracts.Device) error {}
/**
 *  删除设备回调函数: 成功删除设备时调用一次
 *  @param device:      设备实例
 */
func (m *MinimalDriver) RemoveDevice(device *contracts.Device) error {}

SDK功能规划

  • 事件上报
  • 设备发现
  • 点表在线调试功能

许可证

Apache-2.0 License.

Directories

Path Synopsis
example
cmd
extension
gen
zlm
Package zlm provides primitives to interact with the openapi HTTP API.
Package zlm provides primitives to interact with the openapi HTTP API.
internal
pkg
api
vei

Jump to

Keyboard shortcuts

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