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