EMQTT - emq_plugin_template POST to API (SQL) проблема только с клиентом шлюза - PullRequest
0 голосов
/ 18 сентября 2018

Я следовал руководству от Рави Пуджара по передаче сообщений MQTT в SQL с использованием EMQ и интерфейса API (он также получил некоторую помощь здесь, чтобы заставить работать соответствующий плагин).

Я совершенно новичок в Erlang + EMQ, любая помощь по решению, почему только сообщения моего шлюза не сохраняются при публикации из плагина EMQ, приветствуется:

  • Когда я пишу с почтальоном через HTTP API, журнал прекрасно сохраняется в SQL отлично.

  • Когда я подключаюсь к брокеру и публикую с помощью MQTTfx тему, отлично сохраняется и в SQL (через плагин).

  • Когда мой шлюз публикует в теме, опубликованные сообщения не вошел в SQL (через плагин снова), но опубликовать хорошо по теме.

В таблице SQL есть только одно строковое поле, которое допускает нулевое значение. Пример сообщения шлюза (отлично сохраняется, если опубликовано от почтальона до API или опубликовано по теме из MQTTfx): $ GPRP, 745HHBCC5FF, EC16CRH9FFC, -54,0201135644GG46E0082D8A80EFD6EAD1E9A1B132BE1,153656726

Я использую «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) верна, если я проверю в другом месте несоответствие? Тот же QOS из MQTTfx прекрасно сохранился в SQL и опубликован в теме.

Удаление запятых в полученном сообщении: Я на всякий случай попытался удалить запятые из сообщения (и $ в одной из попыток ниже, было несколько попыток, некоторые скомпилировались нормально, но тогда брокер мог застрять):

%%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),

Спасибо, что уделили время:)

1 Ответ

0 голосов
/ 10 апреля 2019

Попробуйте заменить

MessageBin = element(12, Message),

на

MessageBin = element(8, Message),

Надеюсь, это сработает для вас.

...