0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用爱星物联服务脚手架实现定制服务

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2024-06-07 09:38 次阅读

hello,小伙伴们,爱星物联云平台开源已发布一段时间了,这篇文章《爱星物联开源版后台定制开发简介》介绍了爱星物联开源版的后台定制开发介绍。

可能有人会说,这纯理论的内容,如果没有深入去了解源代码和相关工具,可能理解起来还是云里雾里,还是没法下手定制开发吧?

别急,理论指导实践来了。本文介绍基于API脚手架和微服务脚手架构建自定义的对应服务,以及自定义服务怎么与爱星物联IoT平台服务进行交互(内容属于下图红色线框部分)。

wKgZomZiZFyAJj4CAAB1BE1w7x058.jpeg

为了方便演示和理解,先以一个最简单的需求为例:

目标:给平台增加一个产品功能项告警配置功能。

场景设想:一个可充电电池版设备,当电量过低时,需要在平台端判定告警,而告警阈值因用户而异,数值各有不同。

需求:实现告警配置(备注:判定告警和记录告警的逻辑不在演示范围),后台需提供告警阈值的增删改查接口

如何实现上述功能?按照下面的流程走一遍试试。

01创建数据库、数据表

经过简单梳理设备状态的相关内容,可在设备库iot_device下创建数据表t_iot_device_alarm_config,数据表字段内容整理如下:

wKgZomZiZGaAX97pAADQQG0vsrQ42.jpeg

其中dev_id、dpid两列创建唯一索引,创建完成后可进入下一步。

02数据库操作代码生成

在爱星物联IoT平台中,所有配置类业务全部采用了MySQL数据库

Go语言的MySQL数据库ORM相关的框架,开源的有很多,功能基本相同。平台使用了在国内备受欢迎的数据库ORM框架gorm及其配套的gen代码生成工具。

gen工具有定制部分功能,主要是对特定列名、驼峰方式,MySQL部分数据类型转换做了特定修改定制,代码已开源。

后台的小伙伴们可以到https://github.com/ubases/gen找到定制的仓库。

这个工具有打包exe,建仓库代码中的tool/mysql-to-model/gentool.exe,windows下的开发者可以直接使用,linux下的开发者可从源码仓库中下载gen代码编译工具。

iot_device数据库对应的ORM包,在路径iot_model/db_device下,进入该目录后,可看到有gentoo.bat文件,打开该文件,内容如下:

rem 生成整个库

..\..\tool\mysql-to-model\gentool.exe -dsn "root:iLmz8sCXjkTYuh@tcp(192.168.5.56:3306)/iot_device?charset=utf8mb4&parseTime=True&loc=Local" -outPath orm -modelPkgName model

rem 生成单元测试加 -withUnitTest true

rem 生成某个表,后边加 -tables {table name}

将其中的数据库用户名、密码、IP、端口部分改成实际部署环境的参数,然后执行gentoo.bat.如果环境和参数配置都正确,那么会在model和orm子目录下,会生成很多go文件。仔细观察,会发现,这两个子目录新生成1个名为

t_iot_device_alarm_config.gen.go的文件,这个2个文件就是我们新增加的表t_iot_device_alarm_config的所有公共代码。

其中model目录的t_iot_device_alarm_config.gen.go里边包含t_iot_device_alarm_config表对应go结构体及映射关系.

wKgaomZiZGeAE1eYAAEcrxH1hCc26.jpeg

orm目录的t_iot_device_alarm_config.gen.go里边包含该表的常用增删改查操作方法。

wKgZomZiZHKAQiglAADZD-nv4Ws16.jpeg

Model目录下的model包比较好理解,orm目录下的orm包,每个表的操作方法一样,不过只需要熟悉掌握其中的1个表的所有方案,即可掌握orm包下所有方法的用法。

03创建自定义服务骨架

在了解爱星物联API和微服务脚手架的源代码结构后,开源仓库中的iot_demo_api_service是API的脚手架,自定义API服务可以基于这个脚手架进行开发。

仓库中的iot_demo_service是微服务的脚手架。

爱星物联IoT平台有一条未明确说明的规则,Web、APP、小程序等的入口都是API类的服务,该类API服务对外提供http/websocket+json接口;API调用内部服务以及内部服务之间,全部是基于grpc+protobuf的接口。

为了演示需要,按照这个规则,基于iot_demo_api_service和iot_demo_service服务分别拷贝整个工程目录到新的目录,并改名为iot_my_api_service和iot_my_service(正式服务定制时请用正常名称,这里演示,取名随意),修改后的代码结构见下图(左侧是脚手架,右侧是自定义的API和微服务)。

wKgaomZiZHKAa_0JAABZBwGK2zA92.jpeg

拷贝完成后,开始进行包名和代码修改。

进入iot_my_api_service目录,挨个将go文件import的所有包名中的包含的iot_demo_api_service全部替换为iot_my_api_service。进入iot_my_service目录,挨个将go文件import的所有包名中的包含的iot_demo_service全部替换为iot_my_service。改为后,进行简单的编译,确保编译通过。

04微服务和API代码生成和完善

开源仓库中,类似iot_{XXX}_service的目录中,都是一个个服务。这些服务结构看起来是不是很整齐的样子,那是因为大部分增删改查之类的代码、部分实体、及RPC接口都是用工具生成,上一步用到的脚手架部分代码也是这样生成的。

代码生成工具在tool/mysql-to-service路径下。具体的用法可以参考README.md文件。

修改config.yaml配置文件

wKgZomZiZHiAdpOSAAECPIsXElw41.jpeg

执行gen.bat

打开gen.bat文件,并修改为如下内容:

wKgaomZiZHiAG2hSAAAs_4brV8M15.jpeg

后边--tableName 后边加表名,也就是第一步创建的表的名字。

修改后运行,就会在gen目录下,生成如下目录结构的文件。

wKgZomZiZHmAOAnrAABwP4aTHS066.jpeg

注意到上面有个proto目录,工具生成了2个文件:

iot_device_alarm_config_model.gen.proto

iot_device_alarm_config_service.gen.proto。这2个文件里边有定义grpc接口和消息结构。

本次生成的代码,感兴趣的开发者们可以仔细看看代码结构,这里不贴代码介绍了。

执行gengo.bat

这一步依赖上一步生成proto文件,这一步的目标是利用protoc工具将proto文件生成go语言代码。

这一步比较简单,不需要修改gengo.bat文件,执行执行即可。执行完成后,会在protosService下生成对应的go代码,这个例子生成了4个文件:

iot_device_alarm_config_model.gen.pb.go

iot_device_alarm_config_model.gen.pb.micro.go

iot_device_alarm_config_service.gen.pb.go

iot_device_alarm_config_service.gen.pb.micro.go

将这4个文件拷贝到iot_proto/protos/protosService路径下。

代码拷贝

将gen目录下的convert、entitys、handler、service目录整体拷贝到iot_my_service下,覆盖原来的文件。覆盖后的目录文件结构如下所示:

wKgaomZiZHqAAT3iAABfYEeQhfY06.jpeg

将entitys下的文件iot_device_alarm_config_entitys.gen.go拷贝到iot_my_api_service/controls/system/entitys下(这里演示放到了system模块下,实际定制开发中请根据实际需要放到controls下的子模块中)。

完成iot_my_service服务

●打开iot_my_service/handler/register_handler.go文件,把刚生成的handler注册进去。

wKgZomZiZHqAc5z2AACk4M4k1Fg88.jpeg

●进入bin/conf/open,复制一份iot_demo_service.yml,将其改名为iot_my_service.yml,并修改配置文件中的内容。重点是logfile和database下的内容,注意修改正确。

●打开源代码

iot_my_service/config/config.go,修改配置文件为iot_my_service.yml。

●原来demo中的表config_dict_type在iot_config数据库,现在切换到了iot_device数据库,因此,需要删除掉原来config_dict_type相关的内容。

●进入

iot_common/iotconst/service_name.go,给服务定义一个常量IOT_MY_SERVICE,并取个服务名,其它服务会根据这个服务名去微服务注册中心找到地址信息。并在main.go中将服务名修改为新取得名称,即将iotconst.IOT_DEMO_SERVICE修改为iotconst.IOT_MY_SERVICE。

●至此iot_my_service全部改造完成,可直接编译运行。

完成iot_my_api_service服务

●定义rpc客户端。进入rpc目录打开globalService.go,修改为如下内容:

wKgaomZiZHyADpuzAABIvQb5m6U17.jpeg

●进入iot_my_api_service/controls下,实现HTTP接口,这块目前没有代码生成工具生成,可以仿照basedata开头的文件,实现自己的api和service。代码中可以使用上一步创建的客户端接口,类似调用本地函数类似,调用接口方法。关于这块的代码生成,后续可能会推出。

●打开iot_my_api_service/router/router.go,注册新实现的模块的路由。如果共用demo提供的system则不需要重复注册。

●仿照iot_my_service添加配置文件。

●修改config.go,将配置文件名称改为第4步添加的配置文件。

●至此iot_my_api_service全部改造完成,可直接编译运行。

经过以上步骤就完成了微服务和API服务代码的基本定制,通过API接口调用微服务实现告警配置的增删改查。其中基于脚手架的配置步骤有点多,但不复杂,熟练了这个过程是很快的,各位开发者小伙伴来试试吧~

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1483

    浏览量

    61797
  • 脚手架
    +关注

    关注

    0

    文章

    6

    浏览量

    5484
  • IOT
    IOT
    +关注

    关注

    186

    文章

    4174

    浏览量

    196170
收藏 人收藏

    评论

    相关推荐

    2010年迪拜五大行业展|迪拜建材展|紧固件|脚手架|建筑五金|卫浴|陶瓷|大理石

    ;建筑安全设备;混凝土-预制、建筑系统;建筑立面、盘座面及包覆;加热装置;模板/百叶窗;工具-空气、手动及电动;砌体-砖、预制、水泥、灰浆;螺帽、锚杆、螺丝、铰链等;建筑拆除;木材-框架及结构;脚手架
    发表于 09-06 15:51

    2011年沙特建材展|吉达建材展|五大行业展|紧固件|脚手架|玻璃|门窗|

    |吉达建材展|五大行业展|紧固件|脚手架|玻璃|门窗|2011年沙特建材展|吉达建材展|五大行业展|紧固件|脚手架|玻璃|门窗|2011年沙特建材展|吉达建材展|五大行业展|紧固件|脚手架|玻璃|门窗
    发表于 09-06 15:55

    2011年沙特建材展|吉达建材展|五大行业展|紧固件|脚手架|玻璃|门窗|

    ;nbsp;2011年沙特建材展|吉达建材展|五大行业展|紧固件|脚手架|玻璃|门窗|2011年沙特建材展|吉达建材展|五大行业展|紧固件|脚手架|玻璃|门窗|2011年沙特建材展|吉达建材展|五大行业展
    发表于 09-06 16:05

    BLE定制服务中心+外设示例

    我想通过PLE连接2个PSoC 6设备,并通过定制服务传输串行数据。根据使用情况,每个设备可以是中央设备或外围设备。定制服务只在外围数据库中,中央必须发现它并启用通知。这有一个示例项目吗?我只在
    发表于 09-10 15:31

    X86主板定制服务

    `资深x86研发团队,10+年研发经验,研发成员来自于一线的PC、服务器、工控厂商,为客户提供专属的X86主板定制服务。平台:Xeon/Core/Pentium/Celeron/ATOMXeon
    发表于 03-02 11:28

    悬挑式脚手架监理控制要点

    悬挑式脚手架一般有两种:一种是每层一挑,将立杆底部顶在楼板、梁或墙体等建筑部位,向外倾斜固定后,在其上部搭设横杆、铺脚手板形成施工层,施工一个层高,待转入上层
    发表于 12-15 14:29 15次下载

    脚手架的避雷方法

    搭设在旷野山坡上雷击区的钢脚手架在雷雨季节应设避雷装置,避雷装置包括接闪器、接地极、接地线。
    发表于 01-19 15:26 18次下载

    联网脚手架系统能带来什么益处

    横向移动不是脚手架上工人唯一需要担心的事情。超重载荷对立柱施加的压力过大可能会导致结构崩塌。平板下面的联网传感器可以在压力成为问题之前测量到它。
    发表于 03-20 10:16 570次阅读

    科学家研发可溶解的植入骨折的脚手架材料——特殊绷带

    植入骨折的脚手架材料,能够促使身体自身的骨细胞长入其中并治愈骨折。而现在,科学家们开发了一种特殊的绷带,也可以做到这一点。
    的头像 发表于 09-25 11:30 1720次阅读

    脚手架挂牌方案需要符合哪些层面的规定

    脚手架挂牌的过程中,当然就必须应用到方案,即然是方案,又和生产安全有关,也就必须让它符合各个方面的规定,那麼必须让这类方案符合哪些层面的规定呢? 最先就必须让它符合机器设备构造上的规定,由于生产线
    发表于 02-11 10:52 1357次阅读

    关于针对脚手架挂牌的归纳分析

    描述:用五金锁具锁定防护设备来防止很多人 随便操作过程安全防护的能量源或者机器设备,(脚手架挂牌)直到维修结束,五金锁具消除。 :运用衣服标签来警告别人早就被安全防护的能量源或者机器设备不能随便
    发表于 03-01 11:50 767次阅读

    为何需要脚手架挂牌,它的作用是怎样的

    脚手架挂牌是便于避免员工在进行维修、维修保养时,遇到来自设备的发生意外启动、出现异常启动、动力装置释放出所导致的风险性,以保证 员工的人身安全。进行脚手架挂牌操作程序的根本所在,断掉设备与动力装置
    发表于 03-05 11:39 1958次阅读

    脚手架挂牌是什么,有什么作用

    上边的案例,看了后耐人寻味。有误实际操作脚手架挂牌,导致这么多可怜生命的身亡和资产的损害。由此可见恰当应用安全锁具,是一件多么的关键的事儿。温州市博士安全用品 解释一下什么叫脚手架挂牌?
    发表于 03-22 10:27 2025次阅读

    开源IoT平台助力企业构建安全可定制化的IoT解决方案

    团队近期推出了
    的头像 发表于 03-25 10:05 405次阅读

    IoT平台正式开源

    IoT平台,是面向智能设备和智能化企业的IoT平台,提供成熟、安全、全球可用的联网服务
    的头像 发表于 03-29 11:08 461次阅读
    <b class='flag-5'>爱</b><b class='flag-5'>星</b><b class='flag-5'>物</b><b class='flag-5'>联</b>IoT平台正式开源