Страница 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
спасибо