dgiot/apps/dgiot_atomgit
2024-11-19 16:23:15 +08:00
..
etc feat: device 2024-09-03 10:53:21 +08:00
include feat: device 2024-09-03 10:53:21 +08:00
priv feat: device 2024-09-03 10:53:21 +08:00
src feat: channel icon 2024-11-19 16:23:15 +08:00
.gitignore feat: device 2024-09-03 10:53:21 +08:00
license feat: device 2024-09-03 10:53:21 +08:00
README.md feat: device 2024-09-03 10:53:21 +08:00
rebar.config feat: device 2024-09-03 10:53:21 +08:00

一:竞赛流程

请说明本赛项的赛程设置、阶段划分及时间安排等。

二:大赛联系人邀请

1: 邀请参赛选手加入私仓

三:大赛参赛选手加入

1点击右上角邮箱查看邀请信息

2查看邀请信息详情

3接受邀请

4:查看私仓点击个人令牌

5:创建个人令牌

6:保存个人令牌

四:开发环境

1开发常见工具列表

linux/erlang windows/erlang Putty winscp BCompare idea
linux windows putty winscp BCompare IDEA
linux开发环境 winows开发环境 linux远程登录工具 linux文件传输工具 代码比较工具 代码编辑工具

2构建 dgiot 需要 Erlang/OTP R24+, linux Windows下用 开发环境包开发。 下载后解压到D盘根目录严格按照下图操作

管理员身份运行后弹出下面命令框,可以在该命令框下,拉取上传编译代码

会在 D:\msys64\home 下生成一个已电脑名命名的文件夹作为工作空间(注:名字必须为中文

五:插件开发

在windows开发环境下选手小明 准备实现 test 协议插件

1一键式生成插件框架

test替换成自己插件名字

 git clone https://atomgit.com/dgiot/dgiot.git
 cd dgiot
 ./dgiot_install.sh -v atomgit -m test

生成成功

2:查看生成的插件代码

插件目录结构解释

3:编译启动工程

 make run

启动成功后 ctrl+c 退出控制台 弹出下面erlang控制台框编译成功 在自己的插件代码中添加函数

 hello_world() ->
     io:format("~s ~p ~p.~n", [?FILE, ?LINE, <<"Hello World!!!">>]).
  • 修改自己的插件代码后可以在erlang控制台执行 dgiot_plugin:compile(dgiot_test). 进行热编译
  • 执行 dgiot_test:hello_world(). 执行函数

4:确认插件代码无误且能正确编译成功后再上传私仓

git remote 中的usernamepassword替换成自己的用户名和个人令牌

 git config --global user.name "xiaoming"
 git config --global user.email "xiaoming@qq.com"
 cd apps/dgiot_test
 git init
 git remote add origin https://username:password@atomgit.com/dgiot/dgiot_test.git
 git add .
 git commit -m "feat: first commit"
 git push -u origin master

5:查看私仓上传成功

gRPC

1:grpc介绍

gRPC是一个高性能开源和通用的RPC框架基于Protobuf序列化协议开发且支持众多开发语言。gRPC基于以下理念定义一个服务指定其能够被远程调用的方法包含参数和返回类型。在服务端实现这个接口。并运行一个gRPC服务器来处理客户端调用。在客户端拥有一个存根能够向服务端一样的方法。

2:dgiot_grpc_python连接

1.png

3:Dgiot客户端

dgiot通过grpc与其他语言相互通信以及函数调用。在dgiot中以一个grpc通道处理所有交互。而grpc相关函数定义在dgiot_dlink下分为login,logout,send三个函数。 1.png

  • login login函数用于登录grpc服务端其参数为ClinetId为客户端编号。建立grpc通道后将会在通道启动时以通道id为ClinetId登录python服务器。
  • send send函数用于向python客户端发送消息。send函数位于通道的handle_message函数中。在通道接收到消息并且匹配上Message中内容后即可根据消息内容执行send函数调用python服务。 send函数以map的格式发送消息消息在发送前将经过base64编码。
  • logout logout函数用于断开与python服务的连接一般在通道的关闭函数stop中调用。

4:Python 程序文件

python程序示例位于插件\priv\example\python3目录下其目录结构如下 1.png

运行dlink_server文件即可启动python服务接收信息函数位于Dlink类下SayHello方法。其接收request和context两个参数参数含义如下

  • 1.request接收参数request下name属性为接收到的信息。
  • 2.context接收参数当前的环境

自动生成python代码 ''' python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./dlink_server.proto '''

通过对request.name使用base64解码并转为字典后即可获取原本的信息。 1.png 接收参数后通过HelloReply的message字段返回一条信息 1.png 完整交互结果如下图: 1.png

5:gRPC官方文档

https://grpc.io/docs/