Страница 1 из 1
Перезагрузка ноды через привязанное свойство объекта в мажордомо
Добавлено: 16 май 2018, 21:14
Berk
Приветствую, что бы подсказка не пропало в килобайтах чата, выкладываю на форуме. Если необходимо перезагружать ноду(или группу нод или всю сеть - ...смотрите в моих топиках о броадкаст сообщениях) удаленно скриптом из мажордомо, через привязанное свойство объекта, то код ниже может в этом помочь:
Код: Выделить всё
#define MY_RADIO_RF24
#define MY_DEBUG
#define RESET 254
bool _reset = false;
#include <MySensors.h>
MyMessage MsgReset(RESET, V_VAR1);
void preHwInit()
{
}
void before()
{
}
void setup() {
send(MsgReset.set(_reset));
}
void loop()
{
}
void presentation()
{
sendSketchInfo("RESET_NODE", "1.0");
present(RESET, S_CUSTOM);
}
void receive(const MyMessage &message)
{
if (message.sensor == RESET) {
if (message.type == V_VAR1) {
if (message.getBool() == 1) {
softReset();
}
}
}
}
void softReset() {
asm volatile (" jmp 0");
}
Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо
Добавлено: 17 май 2018, 13:46
cabat
Спасибо за ценную информацию.
Сейчас ноды перезагружаю стандартной командой из модуля в МДМ (не помню с какой версии протокола MySensors появилась такая возможность), но есть проблема со спящими нодами - далеко не с первого раза команда доходит.
И вот подумалось мне - а может сделать от обратного - нода регулярно запрашивает значение привязанного свойства из МДМ,
и если оно стало равно 1, уходит в ребут?
Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо
Добавлено: 19 май 2018, 20:22
Berk
Приветствую, вообще без проблем)))
Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо
Добавлено: 19 май 2018, 20:34
Berk
Код: Выделить всё
#define MY_RADIO_RF24
//#define MY_DEBUG
#define MY_DISABLED_SERIAL
#define RESET 254
bool _reset = false;
static uint32_t reset_timer;
static uint16_t reset_interval = 10000; // Интервал опроса контролера
#include <MySensors.h>
MyMessage MsgReset(RESET, V_VAR1);
void preHwInit()
{
}
void before()
{
}
void presentation()
{
sendSketchInfo("RESET_NODE", "1.1");
present(RESET, S_CUSTOM);
}
void setup() {
send(MsgReset.set(_reset));
reset_timer = millis();
}
void loop()
{
if (millis() - reset_timer > reset_interval) {
reset_timer = millis();
request(RESET, V_VAR1);
wait(2000, C_SET, V_VAR1);
}
}
void receive(const MyMessage &message)
{
if (message.sensor == RESET) {
if (message.type == V_VAR1) {
if (message.getBool() == 1) {
softReset();
}
}
}
}
void softReset() {
asm volatile (" jmp 0");
}
Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо
Добавлено: 19 май 2018, 20:46
Berk
Но это не очень хороший метод, лучше все же команда с контролера.
Если делать опрос контролера то нужно много кода добавлять в скетч что бы чекать актуальную команду.
Как минимум после получения ответа на запрос состояния ноде нужно что то снова отправить на контролер, что бы подтвердить получение команды на перезагрузку. А на контролере нужен скрипт который при отправке команды на ноду будет ждать каких то данных от ноды.
Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо
Добавлено: 04 дек 2019, 11:44
pasha413
Здравствуйте. При компиляции выдает ошибку:
Код: Выделить всё
C:\Users\admin\AppData\Local\Temp\ccFqt9Dc.s: Assembler messages:
C:\Users\admin\AppData\Local\Temp\ccFqt9Dc.s:10042: Error: bad instruction `jmp 0'
C:\Users\admin\AppData\Local\Temp\ccFqt9Dc.s:14200: Error: bad instruction `jmp 0'
exit status 1
Ошибка компиляции для платы MyBoardNRF5 nRF51822.
как ее устранить?
Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо
Добавлено: 04 дек 2019, 12:53
Berk
это софт ресет естетственно для авров, для нордиков, если нужна перезагрузка замените например на это :
void new_device() {
//hwWriteConfig(EEPROM_NODE_ID_ADDRESS, 255);
//saveState(100, 255);
wdt_enable(WDTO_15MS);
}
Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо
Добавлено: 04 дек 2019, 13:03
pasha413
спасибо