如何利用爱星物联服务脚手架实现定制服务
前言
上篇文章《爱星物联开源版后台定制开发简介》介绍了爱星物联开源版的后台定制开发介绍,纯理论的内容说明,大家如果没有深入去了解源代码和相关工具,可能理解起来还是云里雾里,还是没法下手定制开发吧?别急,续编来了,理论指导实践,本文继续介绍后台定制开发,但偏实践。
本文介绍基于API脚手架和微服务脚手架构建自定义的API和微服务,以及自定义服务怎么与爱星物联IoT平台服务进行交互。内容属于下图红色线框部分:
为了方便演示和理解,我们以一个最简单的需求为例,给平台增加一个产品功能项告警配置功能,比如我们的可充电电池版设备,当电量过低时,需要在平台端判定为告警,而这个告警阈值,可能因用户而异。我们的需求是实现告警配置(判定告警和记录告警的逻辑不在演示范围),转化为后台技术需求是提供告警阈值的增删改查的接口。需求就是这样,我们按照要实现这个功能需要做的主流程走一遍。
一、创建数据库、数据表
为简化起见,省略设计过程。经过简单梳理,由于是设备状态相关的内容,因此,我们可在设备库iot_device下创建数据表t_iot_device_alarm_config,数据表字段内容整理如下:
其中dev_id、dpid两列创建唯一索引。在数据库中建好数据表后,可进入下一步。
二、数据库操作代码生成
在爱星物联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文件,打开该文件,内容如下:
..\\..\\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结构体及映射关系.
orm目录的t_iot_device_alarm_config.gen.go里边包含该表的常用增删改查操作方法。
Model目录下的model包比较好理解,orm目录下的orm包,每个表的操作方法一样,开发者只需要熟悉掌握其中的1个表的所有方案,即可掌握orm包下所有方法的用法。本文不再详细展开介绍。
三、创建自定义服务骨架
看过上篇文章的开发者朋友们,应该了解咱们爱星物联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和微服务。
拷贝完成后,开始进行包名和代码修改。进入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。改为后,进行简单的编译,确保编译通过。
这一步完成后,可以进入下一步。
四、微服务和API代码生成和完善
开源仓库中,各个类似这种名称iot_{XXX}_service的目录中,都是一个个服务。这些服务结构看起来是不是很整齐的样子,那是因为大部分增删改查之类的代码、部分实体、及RPC接口都是用工具生成,上一步用到的脚手架部分代码也是这样生成的。
代码生成工具在tool/mysql-to-service路径下。具体的用法可以参考README.md文件,这里不再详细介绍,直接实际操作。
1. 修改config.yaml配置文件
2. 执行gen.bat
打开gen.bat文件,并修改为如下内容:
后边–tableName 后边跟着表明,这个例子就是我们第一步创建的表的名字。
修改后运行,就会在gen目录下,生成如下目录结构的文件。
注意到上面有个proto目录,工具生成了2个文件:iot_device_alarm_config_model.gen.proto
iot_device_alarm_config_service.gen.proto。这2个文件里边有定义grpc接口和消息结构。
本次生成的代码,感兴趣的开发者们可以仔细看看代码结构,这里不贴代码介绍了。
3. 执行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路径下。
4. 代码拷贝
将gen目录下的convert、entitys、handler、service目录整体拷贝到iot_my_service下,覆盖原来的文件。覆盖后的目录文件结构如下所示:
将entitys下的文件iot_device_alarm_config_entitys.gen.go拷贝到iot_my_api_service/controls/system/entitys下(这里演示放到了system模块下,实际定制开发中请根据实际需要放到controls下的子模块中)。
5. 完成iot_my_service服务
1)打开iot_my_service/handler/register_handler.go文件,把刚生成的handler注册进去;
2)进入bin/conf/open,复制一份iot_demo_service.yml,将其改名为iot_my_service.yml,并修改配置文件中的内容。重点是logfile和database下的内容,注意修改正确;
3)打开源代码iot_my_service/config/config.go,修改配置文件为iot_my_service.yml;
4)原来demo中的表config_dict_type在iot_config数据库,现在切换到了iot_device数据库,因此,需要删除掉原来config_dict_type相关的内容;
5)进入iot_common/iotconst/service_name.go,给服务定义一个常量IOT_MY_SERVICE,并取个服务名,其它服务会根据这个服务名去微服务注册中心找到地址信息。并在main.go中将服务名修改为新取得名称,即将iotconst.IOT_DEMO_SERVICE修改为iotconst.IOT_MY_SERVICE;
6)至此iot_my_service全部改造完成,可直接编译运行;
6. 完成iot_my_api_service服务
1)定义rpc客户端。进入rpc目录打开globalService.go,修改为如下内容:
2)进入iot_my_api_service/controls下,实现HTTP接口,这块目前没有代码生成工具生成,可以仿照basedata开头的文件,实现自己的api和service。代码中可以使用上一步创建的客户端接口,类似调用本地函数类似,调用接口方法。关于这块的代码生成,后续可能会推出;
3)打开iot_my_api_service/router/router.go,注册新实现的模块的路由。如果共用demo提供的system则不需要重复注册;
4)仿照iot_my_service添加配置文件;
5)修改config.go,将配置文件名称改为第4步添加的配置文件;
6)至此iot_my_api_service全部改造完成,可直接编译运行;
经过以上步骤,就完成了微服务和API服务代码的基本定制,通过API接口调用微服务实现告警配置的增删改查。基于脚手架的配置步骤有点多,但不复杂,熟练了这个过程是很快的。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由赵优秀转载自安信可科技,原文标题为:爱星物联——利用爱星物联服务脚手架实现定制服务,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
安信可星闪模组专属ComboAT初体验:点对点连接实现透传,强抗干扰、超低延迟、超远通讯
Ai-BS21-32S是由深圳市安信可科技有限公司开发的蓝牙星闪模块。本文中安信可科技将为大家介绍星闪模组Ai-BS21-32S的使用方法。
【经验】如何将安信可科技的PB-03F模块升级DTM固件进行认证测试?
使用安信可科技的蓝牙模组PB-03F进行产品设计后期,部分产品需要连同PB-03F模块一同送去认证机构进行认证测试,此时需要给蓝牙模组PB-03F烧录特殊的测试固件DTM。本文指导如何给PB-03F模块烧写DTM固件。
【经验】从零开始配置LoRaWAN网关RG-02,实现LoRaWAN数据转发MQTT
本文章将说明如何配置安信可科技RG-02 LoRaWAN网关的通信网络,使用网关集成ABP解析,MQTT Client, TCP Client等内容。
安信可科技无线模组选型表
提供安信可科技无线模组选型,封装:DIP/SMD,尺寸:10.3mm*9.9mm*2.4(±0.2)mm-120.0mm*120.0mm*30.0mm,通信接口:UART/GPIO/ADC/PWM/I?C/SPI/Touch senser/PSRAM/SDIO/Duplex I²S/麦克风/扬声器,最大速率:2.5mW-100mW,参考距离:80m-5km,供电电压:1.9V-5.25V
产品型号
|
品类
|
封装
|
尺寸(mm)
|
通信接口
|
最大速率(mW)
|
参考距离(m/km)
|
供电电压(V)
|
空中速率(Kbps/Mbps)
|
天线形式
|
工作温度(℃)
|
NF-01-S
|
2.4G模组
|
DIP-8
|
28.6mm*15.3mm
|
SPI
|
5mW
|
240m
|
1.9V-3.6V
|
250Kbps-2Mbps
|
板载天线
|
-20℃~70℃
|
选型表 - 安信可科技 立即选型
【IC】安信可科技发布2款UWB模组BU03和BU04,实现室内厘米级高精度测距定位
BU03和BU04这两款定位模组使用的芯片都是一样的,不同的是BU03是没有带主控MCU的,并且体积小巧,可以集成到自己的主板上,用主芯片直接驱动。
【产品】安信可科技WIFI蓝牙二合一模块Ai-WB2系列通过各项性能测试,实测400-500米传输距离
天线作为无线信号辐射和接收的重要器件,有着不可替代的作用。一款天线设计完成后需要经过测试才能确定其性能是否符合设计要求。那么天线性能需要进行哪些性能测试呢?本文以安信可的Ai-WB2-12F模块为例,看看如何测试PCB天线的性能。
【元件】安信可科技24G人体存在感应雷达模组Rd-01搭载博流BL602芯片+矽典微的S3KM111L芯片,适用于高精准度场景
安信可自主研发的24GHz雷达模组搭载博流BL602芯片+矽典微的S3KM111L芯片,不仅能够正常检测人体存在、移动及微动,还可以检测出人体完全静止状态,解决了传统PIR人体红外感应在人体处于静止状态时就无法检测的痛点。
安信可科技上线的LoRa模块Ra-01SCH-P,抗干扰性强,可支持长达10km的远距离传输
Ra-01SCH-P是安信可科技设计开发的LoRa系列模组。该模组用于超长距离扩频通信,其射频芯片LLCC68+主要采用 LoRa™远程调制解调器,用于超长距离扩频通信,抗干扰性强,能够最大限度降低电流消耗。
安信可科技Rd-04低成本低功耗雷达模组赋能照明行业,适合嵌入式隐蔽设计
安信可科技Rd-04是基于富奥星的XBR818芯片而设计的微动、运动感知模组。其中心频率为10.525GHz,基于多普勒雷达原理,芯片内置算法,无需外挂单片机,超高性价比。主要针对低成本或低功耗的应用领域,该产品定位为微动、运动感知场景应用,适合壁挂或吸顶安装。
安信可科技针对物联网设计通用型蓝牙模组符合BLE 5.0,智能手机Mesh组网,可对接天猫精灵
安信可科技针对物联网设计通用型的蓝牙模组,其功能强大、用途广泛。可以用于智能灯、智能插座、智能空调等其他智能家电。同时符合BLE 5.0及SIG Mesh规范,可直接通过智能手机组建Mesh网络,也可对接天猫精灵等智能音箱,适用于多种智能家居应用场景。
安信可科技推出支持接入Matter协议的Ai-WB2系列模组,硬件封装兼容,实现智能家居互联互通
Ai-WB2系列模组作为安信可科技践行“大连接”理念的首款产品,将支持接入Matter协议;将支持Google Matter;已支持使用苹果Apple设备进行配对和控制;兼容的硬件封装,帮助企业快速进行Matter新产品的迭代。
孩子看电视距离太近了?用安信可科技Rd-03E雷达模组做个距离提醒!
模组通过TTL直接与电脑通信,上位机通过Python开发实现,当检测到孩子趴在电脑前距离太近,则会播放语音(“距离太近了”),以便提醒孩子自己往后挪。如果超过3次,孩子还不动,则直接锁定屏幕,另外还添加了MQTT服务器连接,将每次检测到的距离信息传到MQT服务器上,方便和其他设备联动。来看看是怎么实现的?
在爱星物联,如何上传OTA固件,如何对不同类型的OTA进行升级?
安信可科技讲解如何上传OTA固件和不同类型的OTA升级方式,从模组日志和APP上如何查看OTA是否升级成功,开放平台查看升级记录。
电子商城
登录 | 立即注册
提交评论