ENC28J60 Ethernet Shield HA reporting !GWT:TSA:ETH FAIL



  • Hi there,

    Recently I tried building a RF24 MySensors Ethernet Gateway using a ENC28J60 Nano shield. I had to remap all of the SPI pins of the NRF24L01 (unlike this guide) as the ENC28J60 shield was not playing nice while sharing the MOSI,MISO and SCK pins of the RF24.

    RF24 Pins:
    Pin | From IO | To IO
    CE 9 5
    CS 10 6
    MOSI 11 9
    MISO 12 8
    SCK 13 3
    IRQ 2 2 (no change)
    This was based off this guide which stated that only D10,11,12 & 13 were used for these ENC28J60 nano ethernet shields.

    However now the issue is that although the Ethernet Shield can connect to the network (I can see it's IP on my router dashboard and successfully ping that IP), MY_DEBUG keeps throwing !GWT:TSA:ETH FAIL errors and adding the Gateway to HA has been unsuccessful:
    MySensors Integration Unsuccessful.PNG

    Here is my Gateway Arduino Sketch:

    /**
     * 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_RF24
    //#define MY_RADIO_RFM69
    
    // When ENC28J60 is connected we have to move CE/CSN pins for NRF radio
    #define MY_SOFTSPI
    #define MY_SOFT_SPI_SCK_PIN 3
    #define MY_SOFT_SPI_MISO_PIN 8
    #define MY_SOFT_SPI_MOSI_PIN 9
    #define MY_RF24_CE_PIN 5
    #define MY_RF24_CS_PIN 6
    
    // Enable gateway ethernet module type 
    #define MY_GATEWAY_ENC28J60
    
    // Gateway IP address
    #define MY_IP_ADDRESS 192,168,0,167
    
    // The port to keep open on node server mode / or port to contact in client mode
    #define MY_PORT 5003   
    
    // 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,0,153  
     
    // 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
    
    // 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 
    
    #define MY_DEFAULT_ERR_LED_PIN 7  // Error led pin
    #define MY_DEFAULT_RX_LED_PIN  4  // Receive led pin
    //#define MY_DEFAULT_TX_LED_PIN  3  // the PCB, on board LED
    
    #include <SPI.h>
    #include <UIPEthernet.h>
    #include <MySensors.h>
    
    
    void setup()
    {
    }
    
    void presentation()
    {
      // Present locally attached sensors
    }
    
    void loop() {
    }
    

    A snippet from my config.yaml:

    mysensors: 
      gateways:
        - device: '/dev/ttyUSB0'
          persistence_file: 'mysensors/mysensors.json'
          baud_rate: 115200
        - device: '192.168.0.167'
          persistence_file: 'mysensors/mysensors1.json'
          tcp_port: 5003
      optimistic: false
      persistence: true
      version: 2.3.2
    

    And the MY_DEBUG logs:

    0 MCO:BGN:INIT GW,CP=RNNGA---,FQ=16,REL=255,VER=2.3.2
    4 TSM:INIT
    5 TSF:WUR:MS=0
    12 TSM:INIT:TSP OK
    13 TSM:INIT:GW MODE
    15 TSM:READY:ID=0,PAR=0,DIS=0
    18 MCO:REG:NOT NEEDED
    71 GWT:TIN:IP=192.168.0.167
    1576 !GWT:TIN:ETH FAIL
    1579 MCO:BGN:STP
    1581 MCO:BGN:INIT OK,TSP=1
    2077 !GWT:TSA:ETH FAIL
    2079 TSM:READY:NWD REQ
    2084 ?TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=0,l=0,sg=0,ft=0,st=OK:
    2576 !GWT:TSA:ETH FAIL
    3077 !GWT:TSA:ETH FAIL
    3079 TSF:MSG:READ,1-1-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0
    3576 !GWT:TPS:ETH FAIL
    3578 TSF:MSG:READ,0-1-255,s=255,c=3,t=20,pt=0,l=0,sg=0:
    3584 TSF:MSG:BC
    4077 !GWT:TSA:ETH FAIL
    4576 !GWT:TSA:ETH FAIL
    5076 !GWT:TSA:ETH FAIL
    5577 !GWT:TSA:ETH FAIL
    6076 !GWT:TSA:ETH FAIL
    6577 !GWT:TSA:ETH FAIL
    7076 !GWT:TSA:ETH FAIL
    7579 !GWT:TSA:ETH FAIL
    8076 !GWT:TSA:ETH FAIL
    8577 !GWT:TSA:ETH FAIL
    

    Other things I have tried:

    • Swapping out RF24 boards (but from the MY_DEBUG logs it seems the RF24 is not the problem)
    • Downgrading the AVR Boards to 1.6.11 as per this guide but failed as the sketch failed to compile. Error: multiple libraries found for SPI.h.
    • Powering the board via a external power supply
    • Tried both UIPEthernet Libraries (the one from MySensorsArduinoExamples and the one from ntruchsess

    Perhaps it could be that the sketch occupies 80% of storage (with MY_DEBUG)? I am on the verge of just giving up with this problematic setup and use ESP8266 MQTT instead.

    I would like to hear from anyone who has tried a similar setup! Thanks!



  • After seeing this thread I think I will just give up on this ENC28J60 and get a W5500 instead.


  • Mod

    @Ethan-Chua I have never used Home Assistant, but it looks like the configuration tells HA to connect to a MySensors gateway server at 192.168.0.167 while the gateway is configured to start as a client and connect to a server at 192.168.0.153. So there are 2 clients, each trying to connect to a server that doesn't exist.

    If that's the case, removing this part should make the connection work:

    // 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,0,153  
    


  • @mfalkvidd said in ENC28J60 Ethernet Shield HA reporting !GWT:TSA:ETH FAIL:

    @Ethan-Chua I have never used Home Assistant, but it looks like the configuration tells HA to connect to a MySensors gateway server at 192.168.0.167 while the gateway is configured to start as a client and connect to a server at 192.168.0.153. So there are 2 clients, each trying to connect to a server that doesn't exist.

    If that's the case, removing this part should make the connection work:

    // 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,0,153  
    

    Ok I must have misunderstood the meaning of MY_CONTROLLER_IP_ADDRESS. Will try and see how it goes.

    Thanks!

    UPDATE: It works now thanks @mfalkvidd for your help!


  • Mod

    Great work @Ethan-Chua, thanks for reporting back.



Suggested Topics

21
Online

11.4k
Users

11.1k
Topics

112.7k
Posts