W5100 Gateway hangs /freezes after some time.



  • Hi guys,

    I'm having the "interesting" error, that my gateway which is connected via Lan (Uno+W5100 module) keeps hanging after some time.
    It isn't even pingable.
    Reseting it and everything works fine.
    It is not a thermal problem. I removed the case to make sure.

    There are 5 senors connected to this gateway.

    The code I am using is this one:

    /**
     * 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-2015 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.
     *
     *******************************
     *
     * REVISION HISTORY
     * Version 1.0 - Henrik EKblad
     * Contribution by a-lurker and Anticimex,
     * Contribution by Norbert Truchsess <norbert.truchsess@t-online.de>
     * Contribution by Tomas Hozza <thozza@gmail.com>
     *
     *
     * DESCRIPTION
     * The EthernetGateway sends data received from sensors to the ethernet link.
     * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
     *
     * The GW code is designed for Arduino 328p / 16MHz.  ATmega168 does not have enough memory to run this program.
     *
     * LED purposes:
     * - To use the feature, uncomment WITH_LEDS_BLINKING in MyConfig.h
     * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
     * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
     * - ERR (red) - fast blink on error during transmission error or recieve crc error
     *
     * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
     *
     */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    // Enable gateway ethernet module type 
    #define MY_GATEWAY_W5100
    
    // W5100 Ethernet module SPI enable (optional if using a shield/module that manages SPI_EN signal)
    //#define MY_W5100_SPI_EN 4  
    
    // Enable Soft SPI for NRF radio (note different radio wiring is required)
    // The W5100 ethernet module seems to have a hard time co-operate with 
    // radio on the same spi bus.
    #if !defined(MY_W5100_SPI_EN) && !defined(ARDUINO_ARCH_SAMD)
      #define MY_SOFTSPI
      #define MY_SOFT_SPI_SCK_PIN 14
      #define MY_SOFT_SPI_MISO_PIN 16
      #define MY_SOFT_SPI_MOSI_PIN 15
    #endif
    
    // When W5100 is connected we have to move CE/CSN pins for NRF radio
    #ifndef MY_RF24_CE_PIN
      #define MY_RF24_CE_PIN 5
    #endif
    #ifndef MY_RF24_CS_PIN
      #define MY_RF24_CS_PIN 6
    #endif
    
    // Enable to UDP          
    //#define MY_USE_UDP
    
    //#define MY_IP_ADDRESS 192,168,66,242   // If this is disabled, DHCP is used to retrieve address
    // Renewal period if using DHCP
    //#define MY_IP_RENEWAL_INTERVAL 60000
    // The port to keep open on node server mode / or port to contact in client mode
    #define MY_PORT 5003
    
    // How many clients should be able to connect to this gateway (default 1)
    #define MY_GATEWAY_MAX_CLIENTS 20
    
    
    // Controller ip address. Enables client mode (default is "server" mode). 
    // Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere. 
    //#define MY_CONTROLLER_IP_ADDRESS 192, 168, 66, 240
     
    // The MAC address can be anything you want but should be unique on your network.
    // Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
    // Note that most of the Ardunio examples use  "DEAD BEEF FEED" for the MAC address.
    #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
    
    
    
    // Flash leds on rx/tx/err
    //#define MY_LEDS_BLINKING_FEATURE
    // Set blinking period
    //#define MY_DEFAULT_LED_BLINK_PERIOD 300
    
    // Enable inclusion mode
    #define MY_INCLUSION_MODE_FEATURE
    // Enable Inclusion mode button on gateway
    #define MY_INCLUSION_BUTTON_FEATURE
    // Set inclusion mode duration (in seconds)
    #define MY_INCLUSION_MODE_DURATION 60
    // Digital pin used for inclusion mode button
    #define MY_INCLUSION_MODE_BUTTON_PIN  3
    
    // Uncomment to override default HW configurations
    #define MY_DEFAULT_ERR_LED_PIN 7  // Error led pin
    #define MY_DEFAULT_RX_LED_PIN  8  // Receive led pin
    #define MY_DEFAULT_TX_LED_PIN  9  // the PCB, on board LED
    
    #include <SPI.h>
    
    #if defined(MY_USE_UDP)
    #include <EthernetUdp.h>
    #endif
    #include <Ethernet.h>
    #include <MySensors.h>
    
    
    void setup()
    {
     // Serial.println(MCUSR);
    // MCUSR=0;
    }
    
    void loop() {
    }
    

    Thanks for your help.


  • Hero Member

    This is probably not the issue but I found it strange that you would need to connect 20 clients:

    #define MY_GATEWAY_MAX_CLIENTS 20
    

    How many controllers do you have? Maybe you could try with 2 just to rule out this as your issue.

    I don't know if there is any limit to what you can use but 20 sound like allot.

    Please also check the version of Arduino AVR Boards you are using from your Boards Manager. I think there is some issue if you use anything newer than version 1.6.11.


  • Hardware Contributor

    Yes there is a limit, if i remember well it's 4 connections.



  • 4 connections? Wow that isn't much.
    Is the limit because of hardware limitations?
    If the answer is yes, then I could use an raspberry pi with more "power" compared to the arduino.

    Thanx.


  • Hardware Contributor

    yes, w5100 should have 4connec max, and maybe the latest w5200/5500 have more (maybe 8?).
    Plus, i think ethernet lib is not async which does not help for handling more connec at same time..



  • Thanx for your answer.

    That means, if I would use an raspberrypi as a gateway that could support devices?
    I would like to have only 1 gateway for each floor and I plan to have about 20 sensors connected to each gateway .

    Thanx.



  • @webstor said in W5100 Gateway hangs /freezes after some time.:

    Thanx for your answer.

    That means, if I would use an raspberrypi as a gateway that could support devices?
    I would like to have only 1 gateway for each floor and I plan to have about 20 sensors connected to each gateway .

    Thanx.

    Is there any benefit in using one GW for each floor? Imo it s best, to just have one MySensors network covering the entire building. To avoid problems wrt. to RF-coverage it is better to use some of the nodes also as repeater.

    As far as I understood, there is no limitation below 254 about the number of Nodes connected to one GW. Isn't the MAX_CLIENTS-definition targeting towards the maximum number of controllers to make use of the GW?

    Kind regards



  • yes there is. There is no signal getting through between the ground and the first floor.



  • OK, that's an argument.
    When starting with MySensors, I had similar problems, but using some caps and nrf+pa+lna-modules helped a lot. Keep in mind, you will also have some receiving problems if the distance on the same floor is to big...



  • Sorry but we are drifting away from the main problem.


  • Hero Member

    @webstor Are you confusing controllers with nodes ?

    comment out the line line

    #define MY_GATEWAY_MAX_CLIENTS 20
    
    

    and see if it still locks up.

    Your 20 nodes will still connect ok



  • Ok.
    I will try that when I come home from work.



  • Looks good. I will keep you up to date if the error appears again.

    Thanx.-



  • It stopped crashing.
    But the problems just switched.
    Only one device is communicating with the Gateway. The other devices aren't working anymore. My Relays and one temp and hum sensor are not communicating any more.

    And they are 5 meters away from the Gw.


  • Hero Member

    @webstor I am pretty sure that will be some other problem.

    as far as i am aware #define MY_GATEWAY_MAX_CLIENTS is not a setting for the number of nodes connected and is not needed in a standard Ethernet gateway with one controller, the default setting of 1 is all you need. I am running a w5100 gateway and am able to connect to multiple nodes without that line.

    If you un-comment it do your nodes then connect as per normal again?

    Maybe you could make a new post about #define MY_GATEWAY_MAX_CLIENTS and see if one of the MySensors devs can give a definite answer.

    Have you tried fitting a larger capacitor to the nrf power connections. When I updated to v2.1.1 I had two nodes that were usually very stable start to loose connection now and then. I replaced the 4.7uf with a 47uf and now they are working well again.



  • Hi,

    ok, starts to crash again. I replaced the whole hardware aswell.
    Yes if I uncomment them, the nodes connect normal.

    I'm not using v.2.1.1, my nodes and gateways are on v.2.0.0

    The next step will be to use an esp8266 as gateway instead of the arduino uno.

    Thanx.



  • I upgraded to 2.1.1 and I keep testing.



  • Ok, running on 2.1.1 and commented out the following lines:

    #define MY_GATEWAY_MAX_CLIENTS 20
    

    and

    //#define MY_INCLUSION_BUTTON_FEATURE
    

    is running now for three days and looks good that it will keep it that way.

    thanx guys.



  • Hi,
    I have the same issue, W5100 gateway freeze, seen my update to MySensor 2.1.1.
    I use a static IP otherway it's the same code as @webstor I did removed both line and still gateway freeze (one day max ). Unlike @websor if I reset, gateway doesn't come back. I have to unplug the usb power.

    I only have five sensor, with only one battery powered. I used IDE 1.8.2 and AVR 1.6.18. Everything was working well with MySensor 2.0.0, IDE 1.6.9 , AVR 1.6.15. Any idea what could I look at ?


  • Mod

    Try to restore previous versions of avr and mysensors one at a time and see if you see any changes. Did you check how much free memory it reports after you compiled?



  • when you say freezes: Do you mean it hangs totally, which means it isn't pingable @ all?
    Or just won't accept connections from the sensors?



  • Thank for the hint, I was able to invested the issue more. Here the result:

    @gohan

    Sketch uses 19560 bytes (60%) of program storage space. Maximum is 32256 bytes.
    Global variables use 981 bytes (47%) of dynamic memory, leaving 1067 bytes for local variables. Maximum is 2048 bytes.
    

    @webstor No it's pingable but their some timeout.

    Request timeout for icmp_seq 115
    Request timeout for icmp_seq 116
    64 bytes from 1.1.0.130: icmp_seq=117 ttl=128 time=0.693 ms
    64 bytes from 1.1.0.130: icmp_seq=118 ttl=128 time=0.694 ms
    64 bytes from 1.1.0.130: icmp_seq=119 ttl=128 time=0.656 ms
    64 bytes from 1.1.0.130: icmp_seq=120 ttl=128 time=3.135 ms
    64 bytes from 1.1.0.130: icmp_seq=121 ttl=128 time=0.641 ms
    64 bytes from 1.1.0.130: icmp_seq=122 ttl=128 time=0.618 ms
    64 bytes from 1.1.0.130: icmp_seq=123 ttl=128 time=0.861 ms
    64 bytes from 1.1.0.130: icmp_seq=124 ttl=128 time=3.536 ms
    Request timeout for icmp_seq 125
    Request timeout for icmp_seq 126
    Request timeout for icmp_seq 127
    Request timeout for icmp_seq 128
    64 bytes from 1.1.0.130: icmp_seq=129 ttl=128 time=0.494 ms
    64 bytes from 1.1.0.130: icmp_seq=130 ttl=128 time=0.563 ms
    64 bytes from 1.1.0.130: icmp_seq=131 ttl=128 time=0.622 ms
    64 bytes from 1.1.0.130: icmp_seq=132 ttl=128 time=0.643 ms
    Request timeout for icmp_seq 133
    Request timeout for icmp_seq 134
    Request timeout for icmp_seq 135
    Request timeout for icmp_seq 136
    Request timeout for icmp_seq 137
    64 bytes from 1.1.0.130: icmp_seq=138 ttl=128 time=0.828 ms
    64 bytes from 1.1.0.130: icmp_seq=139 ttl=128 time=0.570 ms
    64 bytes from 1.1.0.130: icmp_seq=140 ttl=128 time=0.766 ms
    64 bytes from 1.1.0.130: icmp_seq=141 ttl=128 time=0.673 ms
    64 bytes from 1.1.0.130: icmp_seq=142 ttl=128 time=3.274 ms
    64 bytes from 1.1.0.130: icmp_seq=143 ttl=128 time=0.662 ms
    64 bytes from 1.1.0.130: icmp_seq=144 ttl=128 time=0.714 ms
    Request timeout for icmp_seq 145
    Request timeout for icmp_seq 146
    64 bytes from 1.1.0.130: icmp_seq=147 ttl=128 time=0.663 ms
    64 bytes from 1.1.0.130: icmp_seq=148 ttl=128 time=3.395 ms
    64 bytes from 1.1.0.130: icmp_seq=149 ttl=128 time=0.660 ms
    64 bytes from 1.1.0.130: icmp_seq=150 ttl=128 time=3.527 ms
    64 bytes from 1.1.0.130: icmp_seq=151 ttl=128 time=0.650 ms
    64 bytes from 1.1.0.130: icmp_seq=152 ttl=128 time=0.629 ms
    64 bytes from 1.1.0.130: icmp_seq=153 ttl=128 time=0.565 ms
    64 bytes from 1.1.0.130: icmp_seq=154 ttl=128 time=0.639 ms
    

    Same test after reset, GW keep dropping but this time with max of 2 drop per ten ping. Other devices (phone, bridge etc...) can be pinged without timeout and I'm on the same network.

    For the communication testing, I'm sending payload to my tv sensor, and I made a video showing the GW status led when he doesn't work:
    and
    After reset

    Look like it's a reset on the first video?

    Next test, new sketch with debug on, sending same payload, GW always receive something like:

    0;255;3;0;9;Eth: 2;3;1;0;32;10
    0;255;3;0;9;TSF:MSG:SEND,0-0-2-2,s=3,c=1,t=32,pt=0,l=2,sg=0,ft=0,st=OK:10
    

    Some time even when payload is received, TV doesn't turn on, also tested with a simple light sensor. GW and TV are in the same room.

    So look like GW is dropping some message, I'll try tomorrow to get back to previous AVR, if their no hint.



  • Hi guys, I may found the issue.

    GW was powered from the NAS (for month) and I switched for a wall adapter. Now I'm able to ping GW without timeout...sorry (I see you guys coming....obviously it's a power issue 😄 !). GW has been running for one days now.

    Note: I'm using AVR 1.6.16 now, but i'm pretty sure, power was the real issue.


Log in to reply
 

Suggested Topics

34
Online

11.4k
Users

11.1k
Topics

112.6k
Posts