Инструменты пользователя

Инструменты сайта


firmware-autoreply

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
firmware-autoreply [2025/11/07 21:43] rsgrinkofirmware-autoreply [2025/11/15 22:31] (текущий) – [Обновление от 15.11.2025] rsgrinko
Строка 3: Строка 3:
 {{:wiki:photo_2025-11-07_21-42-14.jpg|}} {{:wiki:photo_2025-11-07_21-42-14.jpg|}}
  
-В данном разделе приведена информауия по модификации исходного кода прошивки Meshtastic для реализации функционала автоматического ответа на сообщения с информированием об уровнях принятого сигнала.+В данном разделе приведена информация по модификации исходного кода прошивки Meshtastic для реализации функционала автоматического ответа на сообщения с информированием об уровнях принятого сигнала. 
 + 
 +===== Добавляем обработчик принятого сообщения ===== 
 + 
 +В файл **src\modules\ReplyModule.cpp** добавляем метод обработки приема сообщения 
 +<code>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<char*>(reply->decoded.payload.bytes), "RSSI: %ddBm, SNR: %.2fdB, Signal: %.2fdBm", mp.rx_rssi, mp.rx_snr, P); 
 +    reply->decoded.payload.size = strlen(reinterpret_cast<char*>(reply->decoded.payload.bytes)); 
 + 
 +    setReplyTo(reply, mp); 
 +    service->sendToMesh(reply); 
 + 
 +    return ProcessMessage::CONTINUE; 
 +}</code> 
 + 
 +{{:screenshot_2025-11-07_215146.png|}} 
 + 
 +Также требуется добавить метод в заголовочный файл **src\modules\ReplyModule.h** 
 +<code> 
 +ProcessMessage handleReceived(const meshtastic_MeshPacket &mp) override; 
 +</code> 
 + 
 +В нем же правим конструктор на следующее 
 +<code> 
 +ReplyModule() : SinglePortModule("reply", meshtastic_PortNum_TEXT_MESSAGE_APP) {} 
 +</code> 
 + 
 +{{:wiki:screenshot_2025-11-07_215049.png|}} 
 + 
 + 
 +===== Подключаем модуль ===== 
 +В файл **src\modules\Modules.cpp** в начальной секции добавляем подключение файла модуля 
 +<code> 
 +#include "modules/ReplyModule.h" 
 +</code> 
 + 
 +{{:wiki:screenshot_2025-11-07_215249.png|}} 
 + 
 +Также в секции ниже создаем объект созданного модуля 
 +<code> 
 +new ReplyModule(); 
 +</code> 
 +{{:wiki:screenshot_2025-11-07_215325.png|}} 
 + 
 + 
 +===== Обновление от 15.11.2025 =====  
 +В код автоответа требуется добавить проверку на факт того, что сообщение адресованно именно вашей ноде. Иначе она при получения сообщения в общий канал также отреагирует и ответит в директ отправителю. 
 + 
 +<code> 
 +... 
 +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); 
 +.... 
 +</code> 
 + 
 +{{:wiki:photo_2025-11-08_16-04-04.jpg|}} 
 + 
 +Альтернативный вариант (более корректный): 
 +<code> 
 +... 
 +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); 
 +.... 
 +</code> 
 + 
 + 
 +===== Итог ===== 
 +Получили ноду, которая на принятые сообщения отвечает уровнем принятого сигнала и его характеристиками. 
 +{{:wiki:photo_2025-11-07_21-54-25.jpg|}}
firmware-autoreply.1762541024.txt.gz · Последнее изменение: rsgrinko

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki