Бывают ситуации когда необходимо отправить какое то сообщение с одной ноды на группу нод. Стандартное решение это отправка сообщения поочередно каждой ноде из группы.
Но так же можно использовать и нестандартное решение через броадкаст. Стандартно нода не обрабатывает в 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();
}
}
}
}
Рекомендуется в простом виде(как код выше) использовать для не основных сообщений, ну или для любых сообщений если вы уверены в качестве своей радиосети
Для грамотной реализации отправки кастомных броадкаст сообщений необходимо что бы нода отправитель знала всех получателей, на нодах получателях должна быть реализована отправка обратно отправителю подтверждающего сообщения о получении кастомного броадкаст пакета