Home Assistant doesn't connect to MySensors on Arduino MEGA
-
Hello,
it's the first time that I'm using MySensors (on Arduino MEGA) with Home Assistant (on Raspberry Pi 3) and I really don't understand why this two devices don't talk with each other.I have upload this simple scatch on Arduino:
// 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 54 #define MY_SOFT_SPI_MISO_PIN 56 #define MY_SOFT_SPI_MOSI_PIN 55 //#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 UDP communication //#define MY_USE_UDP // If using UDP you need to set MY_CONTROLLER_IP_ADDRESS below // Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP) #define MY_IP_ADDRESS 192,168,1,70 // If using static ip you can define Gateway and Subnet address as well #define MY_IP_GATEWAY_ADDRESS 192,168,1,1 #define MY_IP_SUBNET_ADDRESS 255,255,255,0 // 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 // 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, 1, 200 // 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 // 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 // Set blinking period #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Flash leds on rx/tx/err // 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 // Transmit led pin #if defined(MY_USE_UDP) #include <EthernetUdp.h> #endif #include <Ethernet.h> #include <MySensors.h> #include <Bounce2.h> #define RELAY_PIN 40 #define BUTTON_PIN 8 #define CHILD_ID 2 #define RELAY_ON 1 #define RELAY_OFF 0 Bounce debouncer = Bounce(); bool state = false; bool initialValueSent = false; MyMessage msg(CHILD_ID, V_STATUS); void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); debouncer.attach(BUTTON_PIN); debouncer.interval(10); // Make sure relays are off when starting up digitalWrite(RELAY_PIN, RELAY_OFF); pinMode(RELAY_PIN, OUTPUT); } void presentation() { sendSketchInfo("Relay+button", "1.0"); present(CHILD_ID, S_BINARY); } void loop() { if (!initialValueSent) { Serial.println("Sending initial value"); delay(500); send(msg.set(state?RELAY_ON:RELAY_OFF)); delay(500); Serial.println("Requesting initial value from controller"); delay(500); request(CHILD_ID, V_STATUS); wait(4000, C_SET, V_STATUS); } if (debouncer.update()) { if (debouncer.read()==LOW) { state = !state; // Send new state and request ack back send(msg.set(state?RELAY_ON:RELAY_OFF), true); } } } void receive(const MyMessage &message) { Serial.println(message.type); delay(500); if (message.isAck()) { Serial.println("This is an ack from gateway"); } if (message.type == V_STATUS) { if (!initialValueSent) { Serial.println("Receiving initial value from controller"); initialValueSent = true; } // Change relay state state = (bool)message.getInt(); digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF); send(msg.set(state?RELAY_ON:RELAY_OFF)); } }
Debug output is this one:
IP: 192.168.1.70 0;255;3;0;9;MCO:BGN:STP 0;255;3;0;9;MCO:REG:NOT NEEDED 0;255;3;0;9;MCO:BGN:INIT OK,TSP=NA Sending initial value 0;255;3;0;9;MCO:BGN:INIT GW,CP=R-NGA--,VER=2.1.1
It is showed every 2 sec. in Arduino Serial Panel.
On the other side I have writen this configuration in "configuration.yaml":
mysensors: gateways: - device: '192.168.1.70' persistence_file: 'mysensors.json' tcp_port: 5003 optimistic: false persistence: true retain: true version: 2.0
but Home Assitant log show me this messages:
2017-09-07 13:43:20 ERROR (Thread-2) [mysensors.gateway_tcp] Receive from server failed. 2017-09-07 13:43:20 ERROR (Thread-2) [mysensors.gateway_tcp] Failed to shutdown socket at ('192.168.1.70', 5003)
So what I can do?
Thanks to all.Edit:
I've enabled debug on Home Assistant and it show me this:2017-09-07 14:49:42 INFO (Thread-2) [mysensors.gateway_tcp] Trying to connect to ('192.168.1.70', 5003) 2017-09-07 14:49:42 INFO (Thread-2) [mysensors.gateway_tcp] Connected to ('192.168.1.70', 5003) 2017-09-07 14:49:52 DEBUG (Thread-2) [mysensors.gateway_tcp] Sending 0;255;3;0;2; 2017-09-07 14:49:52 ERROR (Thread-2) [mysensors.gateway_tcp] Receive from server failed. 2017-09-07 14:49:52 INFO (Thread-2) [mysensors.gateway_tcp] Closing socket at ('192.168.1.70', 5003). 2017-09-07 14:49:52 ERROR (Thread-2) [mysensors.gateway_tcp] Failed to shutdown socket at ('192.168.1.70', 5003). 2017-09-07 14:49:52 INFO (Thread-2) [mysensors.gateway_tcp] Socket closed at ('192.168.1.70', 5003).
-
Can you connect to the gateway using myscontroller?
-
My guess is that the arduino gateway reboots every two seconds, either due to a bug in the core arduino library or due to low power availability when sending from the radio.
See similar topic:
https://forum.mysensors.org/topic/7187/problem-adding-nodes-to-ha/2