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),
Надеюсь, это будет работать для вас.