Ethernet gateway and receive function
-
I have an ethernet gw based on Arduino Uno + W5100, working as expected.
I tried to add an actuator (a simple relay), thus I added the usual "receive" function to the script, but at this point the ethernet stopped sending messages to others nodes.I tried filtering the destination, sensors type etc. but it still doesn't work.
I suppose I should "forward" the messages manually in my receive function, correct?
Does someone have a working example?Thanks
Daniele
-
@danielef hard to say without looking at your code, but my guess is that you're doing something in receive that blocks normal processing.
I am not sure if I have seen any sketches with actuators on the gateway, but it should be the same as other nodes.
You should not forward messages manually.
-
The code is really basic, taken from the ethernet gw template simply adding the receive function:
#define MY_DEBUG #define MY_GATEWAY_W5100 #define MY_RF24_CS_PIN 3 #define MY_RF24_IRQ_PIN 2 #define MY_RX_MESSAGE_BUFFER_FEATURE 6 #define MY_IP_ADDRESS 192,168,1,20 #define MY_IP_GATEWAY_ADDRESS 192,168,1,1 #define MY_IP_SUBNET_ADDRESS 255,255,255,0 #define MY_PORT 5003 #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED #if defined(MY_USE_UDP) #include <EthernetUdp.h> #endif #include <Ethernet.h> #define CHILD_ID_LIGHT 1 #include <MyRF24_P2_GW.h> #include <MySensors.h> void setup() { } void presentation() { present(CHILD_ID_LIGHT, S_BINARY, "P2 Luci Armadio"); } void loop() { } void receive(const MyMessage &message) { if (message.type == V_STATUS && message.sensor == CHILD_ID_LIGHT && !message.isAck()) { #ifdef MY_DEBUG Serial.println("*** Receiving ***"); #endif statoLuci = message.getBool(); } }
-
@danielef thanks for sharing the code. It looks good. What does the debug output look like?
-
Sorry for the late response, I've been away for a few days.
The debug output looks very odd to me:4850944 MCO:BGN-Q-,REL=255,VER=2.3.1 4850945 5,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 5,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 4850944 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850944 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850944 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850944 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850944 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850944 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850944 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850944 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MDO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 MCO:BGN:INIT GW,CP=RNNGA-Q-,REL=255,VER=2.3.1 4850945 ```
-
@danielef the sketch you posted does not compile
'statoLuci' was not declared in this scope
are you sure this is the code you are using?
Is there anything in MyRF24_P2_GW.h that we need to know about?From the log, it looks like the node is repeatedly calling Init, without reboot. That is very strange.
-
This is the full code, in my previous message I tried simplifing it and I missed a variable declaration:
#define MY_DEBUG //#define MY_DEBUG_DETAIL #define MY_GATEWAY_W5100 #define MY_RF24_CS_PIN 3 #define MY_RF24_IRQ_PIN 2 #define MY_RX_MESSAGE_BUFFER_FEATURE 6 #define MY_IP_ADDRESS 192,168,1,20 #define MY_IP_GATEWAY_ADDRESS 192,168,1,1 #define MY_IP_SUBNET_ADDRESS 255,255,255,0 #define MY_PORT 5003 #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED #if defined(MY_USE_UDP) #include <EthernetUdp.h> #endif #include <Ethernet.h> #define CHILD_ID_LIGHT 1 #include <MyRF24_P2_GW.h> #include <MySensors.h> MyMessage msgLIGHT(CHILD_ID_LIGHT, V_STATUS); #define BUTTON_UP A4 #define BUTTON_DW A5 #include <Bounce2.h> Bounce debounceUp = Bounce(); Bounce debounceDw = Bounce(); bool statoLuci = 1; const byte numReed = 4; const byte pinReed[numReed] = {A0,A1,A2,A3}; const byte pinRelay[numReed] = {5,6,7,8}; bool statoReed[numReed]; void setup() { // request(CHILD_ID_LIGHT, V_STATUS); debounceUp.attach(BUTTON_UP, INPUT_PULLUP); debounceUp.interval(5); debounceDw.attach(BUTTON_DW, INPUT_PULLUP); debounceDw.interval(5); for (int i=0; i<numReed; i++){ pinMode(pinReed[i], INPUT_PULLUP); statoReed[i] = 0; pinMode(pinRelay[i], OUTPUT); } } void presentation() { present(CHILD_ID_LIGHT, S_BINARY, "P2 Luci Armadio"); } void loop() { debounceUp.update(); debounceDw.update(); if ( debounceUp.fell() ) { Serial.println("UP"); } if ( debounceDw.fell() ) { Serial.println("DOWN"); } for (int i=0; i<numReed; i++){ if (statoLuci){ statoReed[i] = digitalRead(pinReed[i]); digitalWrite(pinRelay[i], statoReed[i]); } else digitalWrite(pinRelay[i], 0); #ifdef MY_DEBUG_DETAIL Serial.print("Reed "); Serial.print(i); Serial.print(" : "); Serial.println(statoReed[i]); #endif } #ifdef MY_DEBUG_DETAIL Serial.println("****************"); wait(1000); #endif } /* void receive(const MyMessage &message) { if (message.destination == 0 && message.type == V_STATUS && message.sensor == CHILD_ID_LIGHT && !message.isAck()) { #ifdef MY_DEBUG Serial.println("*** Receiving ***"); #endif statoLuci = message.getBool(); } } */
MyRF24_2_GW.h contains simply some common defines I use for all the nodes connected to this GW:
#define MY_RADIO_NRF24 #define MY_RF24_DATARATE RF24_250KBPS #define MY_RF24_CHANNEL 115 #ifndef MY_RF24_PA_LEVEL #define MY_RF24_PA_LEVEL RF24_PA_HIGH #endif #ifndef MY_PARENT_NODE_ID #define MY_PARENT_NODE_ID 0 #define MY_PARENT_NODE_IS_STATIC #endif