Перезагрузка ноды через привязанное свойство объекта в мажордомо

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

Перезагрузка ноды через привязанное свойство объекта в мажордомо

Сообщение Berk » 16 май 2018, 21:14

Приветствую, что бы подсказка не пропало в килобайтах чата, выкладываю на форуме. Если необходимо перезагружать ноду(или группу нод или всю сеть - ...смотрите в моих топиках о броадкаст сообщениях) удаленно скриптом из мажордомо, через привязанное свойство объекта, то код ниже может в этом помочь:

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

#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");
}

cabat
Сообщения: 6
Зарегистрирован: 09 янв 2018, 10:08

Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо

Сообщение cabat » 17 май 2018, 13:46

Спасибо за ценную информацию.

Сейчас ноды перезагружаю стандартной командой из модуля в МДМ (не помню с какой версии протокола MySensors появилась такая возможность), но есть проблема со спящими нодами - далеко не с первого раза команда доходит.

И вот подумалось мне - а может сделать от обратного - нода регулярно запрашивает значение привязанного свойства из МДМ,
и если оно стало равно 1, уходит в ребут?

Berk
Сообщения: 69
Зарегистрирован: 11 окт 2017, 22:05

Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо

Сообщение Berk » 19 май 2018, 20:22

Приветствую, вообще без проблем)))

Berk
Сообщения: 69
Зарегистрирован: 11 окт 2017, 22:05

Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо

Сообщение Berk » 19 май 2018, 20:34

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

#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");
}

Berk
Сообщения: 69
Зарегистрирован: 11 окт 2017, 22:05

Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо

Сообщение Berk » 19 май 2018, 20:46

Но это не очень хороший метод, лучше все же команда с контролера.

Если делать опрос контролера то нужно много кода добавлять в скетч что бы чекать актуальную команду.
Как минимум после получения ответа на запрос состояния ноде нужно что то снова отправить на контролер, что бы подтвердить получение команды на перезагрузку. А на контролере нужен скрипт который при отправке команды на ноду будет ждать каких то данных от ноды.

pasha413
Сообщения: 11
Зарегистрирован: 29 ноя 2019, 16:52

Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо

Сообщение pasha413 » 04 дек 2019, 11:44

Здравствуйте. При компиляции выдает ошибку:

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

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.
как ее устранить?

Berk
Сообщения: 69
Зарегистрирован: 11 окт 2017, 22:05

Re: Перезагрузка ноды через привязанное свойство объекта в мажордомо

Сообщение Berk » 04 дек 2019, 12:53

это софт ресет естетственно для авров, для нордиков, если нужна перезагрузка замените например на это :

void new_device() {
//hwWriteConfig(EEPROM_NODE_ID_ADDRESS, 255);
//saveState(100, 255);
wdt_enable(WDTO_15MS);
}


Ответить