1 Star 0 Fork 200

watertreestar/edge

forked from iBUILDING-X/driver-box 
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
helper.go 2.80 KB
一键复制 编辑 原始数据 按行查看 历史
watertreestar 提交于 2023-08-02 14:38 +08:00 . chore: rename package
// 核心工具助手文件
package helper
import (
"encoding/json"
"gitee.com/watertreestar/edge/driverbox/common"
"gitee.com/watertreestar/edge/driverbox/config"
"gitee.com/watertreestar/edge/driverbox/export"
"gitee.com/watertreestar/edge/driverbox/helper/crontab"
"gitee.com/watertreestar/edge/driverbox/helper/shadow"
"gitee.com/watertreestar/edge/driverbox/plugin"
"go.uber.org/zap"
"io/fs"
"path/filepath"
"strings"
"sync"
)
var Exports []export.Export
var DeviceShadow shadow.DeviceShadow // 本地设备影子
var PluginCacheMap = &sync.Map{} // 插件通用缓存
var Crontab crontab.Crontab // 全局定时任务实例
var DriverConfig config.DriverConfig // 驱动配置
// Map2Struct map 转 struct,用于解析连接器配置
// m:map[string]interface
// v:&struct{}
func Map2Struct(m interface{}, v interface{}) error {
b, err := json.Marshal(m)
if err != nil {
return err
}
return json.Unmarshal(b, v)
}
// PointValueType2EdgeX 点位值类型转换为 EdgeX 数据类型
// int => Int64、float => Float64、string => String
func PointValueType2EdgeX(valueType string) string {
switch strings.ToLower(valueType) {
case "int":
return common.ValueTypeInt64
case "float":
return common.ValueTypeFloat64
case "string":
return common.ValueTypeString
default:
return valueType
}
}
// GetChildDir 获取指定路径下所有子目录
func GetChildDir(path string) (list []string, err error) {
err = filepath.WalkDir(path, func(path string, d fs.DirEntry, err error) error {
if d.IsDir() {
list = append(list, path)
}
return nil
})
return
}
// GetChildDirName 获取指定路径下所有子目录名称
func GetChildDirName(path string) (list []string, err error) {
err = filepath.WalkDir(path, func(path string, d fs.DirEntry, err error) error {
if d.IsDir() {
list = append(list, d.Name())
}
return nil
})
return
}
func PointCacheFilter(deviceData *plugin.DeviceData) {
// 定义一个空的整型数组
var points []plugin.PointData
for _, point := range deviceData.Values {
// 获取点位信息
_, ok := CoreCache.GetPointByDevice(deviceData.DeviceName, point.PointName)
if !ok {
Logger.Warn("unknown point", zap.Any("deviceName", deviceData.DeviceName), zap.Any("pointName", point.PointName))
continue
}
// 缓存比较
shadowValue, _ := DeviceShadow.GetDevicePoint(deviceData.DeviceName, point.PointName)
if shadowValue == point.Value {
Logger.Debug("point value = cache, stop sending to messageBus")
continue
}
// 缓存
if err := DeviceShadow.SetDevicePoint(deviceData.DeviceName, point.PointName, point.Value); err != nil {
Logger.Error("shadow store point value error", zap.Error(err), zap.Any("deviceName", deviceData.DeviceName))
}
// 点位值类型名称转换
points = append(points, point)
}
deviceData.Values = points
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/watertreestar/edge.git
git@gitee.com:watertreestar/edge.git
watertreestar
edge
edge
v1.0.0

搜索帮助