EMQTT - emq_plugin_template проблема POST в API (SQL) только с клиентом шлюза

Я следовал руководству от Рави Пуджара по передаче сообщений 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),

Спасибо за ваше время:)

0 ответов

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

MessageBin = element(12, Message),

с

MessageBin = element(8, Message),

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

Другие вопросы по тегам