====== Автоматический ответ ====== {{:wiki:photo_2025-11-07_21-42-14.jpg|}} В данном разделе приведена информация по модификации исходного кода прошивки Meshtastic для реализации функционала автоматического ответа на сообщения с информированием об уровнях принятого сигнала. ===== Добавляем обработчик принятого сообщения ===== В файл **src\modules\ReplyModule.cpp** добавляем метод обработки приема сообщения ProcessMessage ReplyModule::handleReceived(const meshtastic_MeshPacket &mp) { auto reply = allocDataPacket(); float P = mp.rx_rssi + mp.rx_snr - 10*log10f(pow10f(mp.rx_snr/10)+1); sprintf(reinterpret_cast(reply->decoded.payload.bytes), "RSSI: %ddBm, SNR: %.2fdB, Signal: %.2fdBm", mp.rx_rssi, mp.rx_snr, P); reply->decoded.payload.size = strlen(reinterpret_cast(reply->decoded.payload.bytes)); setReplyTo(reply, mp); service->sendToMesh(reply); return ProcessMessage::CONTINUE; } {{:screenshot_2025-11-07_215146.png|}} Также требуется добавить метод в заголовочный файл **src\modules\ReplyModule.h** ProcessMessage handleReceived(const meshtastic_MeshPacket &mp) override; В нем же правим конструктор на следующее ReplyModule() : SinglePortModule("reply", meshtastic_PortNum_TEXT_MESSAGE_APP) {} {{:wiki:screenshot_2025-11-07_215049.png|}} ===== Подключаем модуль ===== В файл **src\modules\Modules.cpp** в начальной секции добавляем подключение файла модуля #include "modules/ReplyModule.h" {{:wiki:screenshot_2025-11-07_215249.png|}} Также в секции ниже создаем объект созданного модуля new ReplyModule(); {{:wiki:screenshot_2025-11-07_215325.png|}} ===== Обновление от 15.11.2025 ===== В код автоответа требуется добавить проверку на факт того, что сообщение адресованно именно вашей ноде. Иначе она при получения сообщения в общий канал также отреагирует и ответит в директ отправителю. ... ProcessMessage ReplyModule::handleReceived(const meshtastic_MeshPacket &mp) { uint32_t nodeId = nodeDB->getNodeNum(); // Проверяем, нам ли адресован этот пакет if (mp.to == nodeId) { auto reply = allocDataPacket(); float P = mp.rx_rssi + mp.rx_snr - 10*log10f(pow10f(mp.rx_snr/10)+1); .... {{:wiki:photo_2025-11-08_16-04-04.jpg|}} Альтернативный вариант (более корректный): ... ProcessMessage ReplyModule::handleReceived(const meshtastic_MeshPacket &mp) { // Проверяем, что пакет не является броадкаст if (!isBroadcast(mp.to)) { auto reply = allocDataPacket(); float P = mp.rx_rssi + mp.rx_snr - 10*log10f(pow10f(mp.rx_snr/10)+1); .... ===== Итог ===== Получили ноду, которая на принятые сообщения отвечает уровнем принятого сигнала и его характеристиками. {{:wiki:photo_2025-11-07_21-54-25.jpg|}}