我遵循了Ravi关于使用EMQ和api接口将MQTT消息传递到SQL的教程(他还从这里得到了一些帮助,以使相关插件工作)。
我对Erlang + EMQ完全陌生,对于解决为什么在从EMQ插件发布时只保存我网关的消息的任何帮助都是非常感谢的:
SQL表只有一个字符串字段,允许null。示例网关消息(如果从postman发布到api或发布在MQTTfx的主题上,则保存良好):$GPRP,745HHBCC5FF、EC16CRH9FFC、$GPRP,745HHBCC5FF
我使用“emq_plugin_template.erl”和“on_message_publish”发送请求。插件编译没有错误,EMQ重新启动,插件在板上启用,运行平稳。我也订阅了正确的主题,当然,在网关上。
on_message_publish(Message, _Env) ->
io:format("publish ~s~n", [emqttd_message:format(Message)]),
MessageBin = element(12, Message),
MessageStr = binary_to_list(MessageBin),
inets:start(),
Method = post,
URL = "http://127.0.0.1/api/v2/GatewaySQL/1234",
Header = [{"X-DreamFactory-Api-Key", "1234"}],
Type = "application/json",
%%Body = MessageStr, %%just that didn't work with gateway
Body = "{\"resource\":[{\"TagRAW\":\"" ++ MessageStr ++ "\"}]}",
HTTPOptions = [],
Options = [],
R = httpc:request(Method, {URL, Header, Type, Body},HTTPOptions,Options),
{ok, Message}.检查QOS:我已经确认了QOS (QOS 0消息)主题订阅是正确的,是否应该检查其他地方是否不匹配?不过,来自MQTTfx的相同的QOS保存得很好,并在主题上发布了。
在接收到的消息中删除逗号:我只是为了以防万一尝试从消息中删除逗号(下面的尝试之一中的$进行了更多的尝试,一些编译好了,但这时代理可能被卡住了):
%%lists:delete($$,MessageStr),
%%lists:flatten(MessageStr), %%tried without flattening it as well
%%Segmented = string:tokens(MessageStr, ","),
%%lists:flatten(Segmented),
%%IOMessageStr = io_lib:format("~w",[MessageStr]),
%%Flattened = lists:flatten(IOMessageStr),谢谢你抽出时间:)
发布于 2019-04-10 09:53:35
试着取代
MessageBin = element(12, Message),使用
MessageBin = element(8, Message),希望这会对你有用的。
https://stackoverflow.com/questions/52385110
复制相似问题