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).