Отправка нодой и обработка группой нод бродкаст сообщения

О программировании Arduino, использование библиотек, примеры и общие вопросы программирования.
Ответить
Berk
Сообщения: 81
Зарегистрирован: 11 окт 2017, 22:05

Отправка нодой и обработка группой нод бродкаст сообщения

Сообщение Berk »

Приветствую всех форумчан.

Бывают ситуации когда необходимо отправить какое то сообщение с одной ноды на группу нод. Стандартное решение это отправка сообщения поочередно каждой ноде из группы.
Но так же можно использовать и нестандартное решение через броадкаст. Стандартно нода не обрабатывает в void receive() броадкаст сообщения НЕ от гейта, вы можете видеть в терминале что нода получает такие сообщения но обработки не происходит. Я предлагаю решать эту проблему через глобальную переменную extern MyMessage _msg; из самой библиотеки MySensors

Для этого необходимо:

В скетче на ноде отправителе добавить код отправки сообщения:

Код: Выделить всё

#define MY_REPEATER_FEATURE
#define MY_NODE_ID 100 //id ноды отправителя

bool a = 1; // переменная с передаваемым значением
MyMessage msg(1, V_STATUS); // cообщение на сенсор номер 1

void setup()
{}

void loop()
{
send(msg.setDestination(255).set(a)); // броадкаст сообщение
}
 

В скетчах на нодах получателях добавить код для обработки полученного сообщения:

Код: Выделить всё

#define MY_PARENT_NODE_ID 100

byte master_id = 100 //id ноды отправителя
bool a; //переменная с передаваемым значением

void setup()
{}

void loop()
{}

void receive(const MyMessage & message) {
if (_msg.destination == 255) {
if (_msg.sender == master_id) {
if (_msg.type == V_STATUS) {
a = message.getBool();
}
}
}
}
Хочу обратить внимание на один момент, хоть отправка кастомного броадкаст запроса и облегчает задачу отправки большой группе нод, но и в тот же момент усложняет подтверждение получение броадкаст сообщения из за НЕ возможности использовать подтверждение получения через isAck

Рекомендуется в простом виде(как код выше) использовать для не основных сообщений, ну или для любых сообщений если вы уверены в качестве своей радиосети :)

Для грамотной реализации отправки кастомных броадкаст сообщений необходимо что бы нода отправитель знала всех получателей, на нодах получателях должна быть реализована отправка обратно отправителю подтверждающего сообщения о получении кастомного броадкаст пакета
Ответить