firmware-autoreply
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| firmware-autoreply [2025/11/07 21:43] – rsgrinko | firmware-autoreply [2025/11/15 22:31] (текущий) – [Обновление от 15.11.2025] rsgrinko | ||
|---|---|---|---|
| Строка 3: | Строка 3: | ||
| {{: | {{: | ||
| - | В данном разделе приведена информауия по модификации исходного кода прошивки Meshtastic для реализации функционала автоматического ответа на сообщения с информированием об уровнях принятого сигнала. | + | В данном разделе приведена информация по модификации исходного кода прошивки Meshtastic для реализации функционала автоматического ответа на сообщения с информированием об уровнях принятого сигнала. |
| + | |||
| + | ===== Добавляем обработчик принятого сообщения ===== | ||
| + | |||
| + | В файл **src\modules\ReplyModule.cpp** добавляем метод обработки приема сообщения | ||
| + | < | ||
| + | { | ||
| + | auto reply = allocDataPacket(); | ||
| + | float P = mp.rx_rssi + mp.rx_snr - 10*log10f(pow10f(mp.rx_snr/ | ||
| + | sprintf(reinterpret_cast< | ||
| + | reply-> | ||
| + | |||
| + | setReplyTo(reply, | ||
| + | service-> | ||
| + | |||
| + | return ProcessMessage:: | ||
| + | }</ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Также требуется добавить метод в заголовочный файл **src\modules\ReplyModule.h** | ||
| + | < | ||
| + | ProcessMessage handleReceived(const meshtastic_MeshPacket &mp) override; | ||
| + | </ | ||
| + | |||
| + | В нем же правим конструктор на следующее | ||
| + | < | ||
| + | ReplyModule() : SinglePortModule(" | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | ===== Подключаем модуль ===== | ||
| + | В файл **src\modules\Modules.cpp** в начальной секции добавляем подключение файла модуля | ||
| + | < | ||
| + | #include " | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Также в секции ниже создаем объект созданного модуля | ||
| + | < | ||
| + | new ReplyModule(); | ||
| + | </ | ||
| + | {{: | ||
| + | |||
| + | |||
| + | ===== Обновление от 15.11.2025 ===== | ||
| + | В код автоответа требуется добавить проверку на факт того, что сообщение адресованно именно вашей ноде. Иначе она при получения сообщения в общий канал также отреагирует и ответит в директ отправителю. | ||
| + | |||
| + | < | ||
| + | ... | ||
| + | ProcessMessage ReplyModule:: | ||
| + | { | ||
| + | uint32_t nodeId = nodeDB-> | ||
| + | |||
| + | // Проверяем, | ||
| + | if (mp.to == nodeId) { | ||
| + | auto reply = allocDataPacket(); | ||
| + | float P = mp.rx_rssi + mp.rx_snr - 10*log10f(pow10f(mp.rx_snr/ | ||
| + | .... | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Альтернативный вариант (более корректный): | ||
| + | < | ||
| + | ... | ||
| + | ProcessMessage ReplyModule:: | ||
| + | { | ||
| + | // Проверяем, | ||
| + | if (!isBroadcast(mp.to)) { | ||
| + | auto reply = allocDataPacket(); | ||
| + | float P = mp.rx_rssi + mp.rx_snr - 10*log10f(pow10f(mp.rx_snr/ | ||
| + | .... | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Итог ===== | ||
| + | Получили ноду, которая на принятые сообщения отвечает уровнем принятого сигнала и его характеристиками. | ||
| + | {{: | ||
firmware-autoreply.1762541024.txt.gz · Последнее изменение: — rsgrinko
