Hi There,
Still investigating.... I refresh my nodemanager repo, but still same behavior. Thus I downgraded MySensors library from 2.4.0 Alpha to 2.3.2 for the nodemanager, still the same. Which is very strange to me as I have a nodemanager, SensorLatchingRelay2Pins, working perfectly over NRF24 with a serial gateway.
I introduced some Serial.println in receive(const MyMessage &message), but looks like never called.
Here is my code, maybe I wrote a mistake:
/*
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2017 Sensnology AB
* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*/
/**************************
Template
This sketch can be used as a template since containing the most relevant MySensors library configuration settings,
NodeManager's settings, all its the supported sensors commented out and a sketch structure fully functional to operate with
NodeManager. Just uncomment the settings you need and the sensors you want to add and configure the sensors in before()
*/
/**********************************
* MySensors node configuration
*/
// General settings
#define SKETCH_NAME "NodeManagerRelay"
#define SKETCH_VERSION "1.0"
#define MY_DEBUG
//#define MY_NODE_ID 99
// NRF24 radio settings
//#define MY_RADIO_RF24
//#define MY_RF24_ENABLE_ENCRYPTION
//#define MY_RF24_CHANNEL 125
//#define MY_RF24_PA_LEVEL RF24_PA_HIGH
//#define MY_DEBUG_VERBOSE_RF24
//#define MY_RF24_DATARATE RF24_250KBPS
// RFM69 radio settings
#define MY_RADIO_RFM69
#define MY_RFM69_FREQUENCY RFM69_868MHZ
#define MY_IS_RFM69HW
#define MY_RFM69_NEW_DRIVER
//#define MY_RFM69_ENABLE_ENCRYPTION
//#define MY_RFM69_NETWORKID 100
#define MY_DEBUG_VERBOSE_RFM69
#define MY_RFM69_IRQ_PIN 2
//#define MY_RFM69_IRQ_NUM MY_RFM69_IRQ_PIN
#define MY_RFM69_CS_PIN 10
//#define MY_RF69_SPI_CS D2
//#define MY_RFM69_ATC_MODE_DISABLED
// Advanced settings
#define MY_BAUD_RATE 9600
//#define MY_SMART_SLEEP_WAIT_DURATION_MS 500
//#define MY_SPLASH_SCREEN_DISABLED
//#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE
//#define MY_SIGNAL_REPORT_ENABLED
// Optimizations when running on 2032 Coin Cell. Also set nodeManager.setSleepBetweenSend(500) and run the board at 1Mhz
//#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
//#define MY_TRANSPORT_WAIT_READY_MS 5000
//#define MY_SLEEP_TRANSPORT_RECONNECT_TIMEOUT_MS 2000
//#define MY_PARENT_NODE_ID 0
//#define MY_PARENT_NODE_IS_STATIC
/**********************************
* MySensors gateway configuration
*/
// Common gateway settings
#define MY_REPEATER_FEATURE
/***********************************
* NodeManager configuration
*/
#define NODEMANAGER_DEBUG ON
#define NODEMANAGER_INTERRUPTS ON
#define NODEMANAGER_SLEEP OFF
#define NODEMANAGER_RECEIVE ON
#define NODEMANAGER_DEBUG_VERBOSE ON
#define NODEMANAGER_POWER_MANAGER OFF
#define NODEMANAGER_CONDITIONAL_REPORT OFF
#define NODEMANAGER_EEPROM OFF
#define NODEMANAGER_TIME OFF
#define NODEMANAGER_RTC OFF
#define NODEMANAGER_SD OFF
#define NODEMANAGER_HOOKING OFF
#define NODEMANAGER_OTA_CONFIGURATION OFF
#define NODEMANAGER_SERIAL_INPUT OFF
// import NodeManager library (a nodeManager object will be then made available)
#include <MySensors_NodeManager.h>
/***********************************
* Add your sensors
*/
#include <sensors/SensorRelay.h>
SensorRelay relay(6);
/***********************************
* Main Sketch
*/
// before
void before() {
/***********************************
* Configure your sensors
*/
// call NodeManager before routine
nodeManager.before();
}
// presentation
void presentation() {
// call NodeManager presentation routine
nodeManager.presentation();
}
// setup
void setup() {
// call NodeManager setup routine
nodeManager.setup();
}
// loop
void loop() {
// call NodeManager loop routine
nodeManager.loop();
}
//#if NODEMANAGER_RECEIVE == ON
// receive
void receive(const MyMessage &message) {
Serial.println("********* In receive ************");
if (message.isAck()) {
Serial.println("************** This is an ack from gateway ******************");
}
// call NodeManager receive routine
nodeManager.receive(message);
}
//#endif
#if NODEMANAGER_TIME == ON
// receiveTime
void receiveTime(unsigned long ts) {
// call NodeManager receiveTime routine
nodeManager.receiveTime(ts);
}
#endif
So the detailed issue would be:
A nodemanager doesn't receive ACK anymore after the INIT from the gateway (MQTT with TLS) over RFM69. Looks like receive(const MyMessage &message) is never called. An extract from the node logs to illustrate:
11:26:28.397 -> 7487 RFM69:SWR:ACK,FROM=0,SEQ=13,RSSI=-55
11:26:28.462 -> 7532 TSF:MSG:SEND,2-2-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
11:26:28.850 -> 7933 RFM69:SAC:SEND ACK,TO=0,RSSI=-44
11:26:28.882 -> 7974 RFM69:CSMA:RSSI=-100
11:26:28.914 -> 8003 TSF:MSG:READ,0-0-2,s=255,c=3,t=27,pt=1,l=1,sg=0:1
11:26:28.978 -> 8060 MCO:PIM:NODE REG=1
11:26:29.010 -> 8087 MCO:BGN:STP
11:26:29.047 -> 8105 NM:STP:ID=2 M=1
11:26:29.047 -> 8128 NM:LOOP:RELAY(1):SET t=2 v=0
11:26:29.717 -> 8235 NM:STP:HW V=3329 F=8 M=1116
11:26:29.749 -> 8269 MCO:BGN:INIT OK,TSP=1
11:26:29.782 -> 8298 NM:MSG:SEND(1) t=2 p=0
11:26:29.815 -> 8327 RFM69:SWR:SEND,TO=0,SEQ=14,RETRY=0
11:26:29.847 -> 8370 RFM69:CSMA:RSSI=-105
11:26:32.071 -> 10600 !RFM69:SWR:NACK
I guess I can open an issue in the nodemanager github.
Reg
Eric.