DGIOT是一个面向物联网的开源数据分析平台,它为用户提供了快速、高效采集、管理和分析物联网设备数据的能力,并具备多种数据处理和可视化展示方式。
DGIOT的安装实例数已经超过 35.2k,用户遍布全球。拿下多个物联网产品的领域赛道冠军。
已承建多个重大国际赛事场馆数字驾驶舱、平安校园数据中台、电信级设备监管平台、千亿级产业大脑等。
全开放源码,全流程低代码。
强大开源社区,集成和兼容各种开源工具。
商业级物联网基座,快速承接物联网项目。
面向工业物联网的轻量级开源平台,致力于平台的标准化和工具化。打造全面、丰富、专业的开源生态产品及服务。
首页 › 博客, 技术文章, 置顶推荐
dgiot插件开发 rebar3插件目录结构如下:
dgiot |——lib |-dgiot_demoplugin |- ebin |- dgiot_demopugin.app - dgiot_demoplugin.beam - dgiot_demoplugin_app.beam - dgiot_demoplugin_sup.beam - dgiot_demonplugin_channel.beam - dgiot_demonplugin_handler.beam -dgiot_otherplugin |- ebin |- dgiot_otherplugin.app - dgiot_otherplugin.beam - dgiot_otherplugin_app.beam - dgiot_otherplugin_sup.beam - dgiot_otherplugin_channel.beam - dgiot_otherplugin_handler.beam
%%%------------------------------------------------------------------- %%% @author johnliu %%% @copyright (C) 2021, <COMPANY> %%% @doc %%% %%% @end %%% Created : 24. 3月 2021 10:17 %%%------------------------------------------------------------------- -module(dgiot_demonplugin_channel). -author("johnliu"). -behavior(dgiot_channelx). -include("dgiot_demonplugin.hrl"). -define(TYPE, <<"demonplugin">>). -record(state, {id}). %% API -export([ start/2 ]). %% Channel callback -export([init/3, handle_init/1, handle_event/3, handle_message/2, stop/3]). -channel(?TYPE). -channel_type(#{ type => 1, title => #{ zh => <<"demonplugin通道"/utf8>> }, description => #{ zh => <<"demonplugin通道"/utf8>> } }). %% 注册通道参数 -params(#{ <<"port">> => #{ order => 2, type => integer, required => true, default => 51889, title => #{ zh => <<"服务器端口"/utf8>> }, description => #{ zh => <<"服务器端口"/utf8>> } } }). start(ChannelId, ChannelArgs) -> dgiot_channelx:add(?TYPE, ChannelId, ?MODULE, ChannelArgs). %% 通道初始化 init(?TYPE, ChannelId, Args) -> #{ <<"ip">> := Ip, <<"port">> := Port, <<"total">> := Total} = Args, do_something(<<"hello plugin">>), State = #state{ id = ChannelId }, {ok, State, []}. handle_init(State) -> {ok, State}. %% 通道消息处理,注意:进程池调用 handle_event(_EventId, Event, State) -> lager:info("channel ~p", [Event]), {ok, State}. handle_message(_Message, State) -> {ok, State}. stop(ChannelType, ChannelId, _State) -> ok. do_something(Msg) -> io:format("Msg ~p",[Msg]).
application:loaded_applications()
file:list_dir(Dir)
Mod:module_info(attributes)
Mod:start(ChannelId, ChannelArgs)
示例代码如下:
%%%------------------------------------------------------------------- %%% @author johnliu %%% @copyright (C) 2019, <COMPANY> %%% @doc %%% %%% @end %%% Created : 06. 八月 2019 18:00 %%%------------------------------------------------------------------- -module(dgiot_plugin). -author("johnliu"). -define(SYS_APP, [ kernel, stdlib, sasl ]). -export([start/0]) start() -> check_module( fun({_App, _Vsn, Mod}, Acc) -> case code:is_loaded(Mod) =/= false of true -> case lists:keyfind(channel, 1, Mod:module_info(attributes)) of false -> Acc; {channel, ChannelTypes} -> do_somthing() end; false -> Acc end end, []). check_module(Check, Acc0) -> Fun = fun({App, _Desc, Vsn}, Acc) -> Dir = lists:concat(["lib/", App, "-", Vsn, "/ebin"]), case not lists:member(App, ?SYS_APP) andalso file:list_dir(Dir) of {ok, FS} -> lists:foldl( fun(FileName, Acc1) -> case filename:extension(FileName) == ".beam" of true -> Mod = list_to_atom(filename:basename(FileName, ".beam")), Check({App, Vsn, Mod}, Acc1); false -> Acc1 end end, Acc, FS); _ -> Acc end end, lists:foldl(Fun, Acc0, application:loaded_applications()). do_somthing() -> ok
加微信咨询
请填写下面表单,我们的工作人员会与您联系。
报错: 未找到这个表单
请填写下面表单,我们会即时将最新版本下载地址发到您的邮箱。
加小迪为好友即可加入交流群