Motion Sensor not presenting to RS485 Gateway / TSM:FPAR:NO REPLY
-
Hardware: Arduino nano boards+ RS485 devices with separate 5 volt power supply
I am trying to set up my 1st Rs485 gateway motion sensor on Home Assistant, per the following tutorial:
https://www.mysensors.org/build/rs485The motion sensor is not presenting itself to the gateway, so I did some digging and found this thread on the subject:
https://forum.mysensors.org/topic/11048/mqtt-ethernet-gateway-with-wired-rs485-network.
I have things wired up as per this pic provided in the tutorial
Although I am not using mqtt, everything seemed to be pertinent but I was still unable to get communication between the sensor and gateway.
Ha logs show the gateway seems to be happy:
[mysensors] Connected to Serial<id=0x7f2fd0c2f518, open=True>(port='/dev/ttyUSB0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=0, xonxoff=False, rtscts=False, dsrdtr=False) 2020-10-05 13:17:05 INFO (MainThread) [mysensors] Connected to <_SelectorSocketTransport fd=25 read=idle write=<idle, bufsize=0>> p:Gateway startup complete.However serial monitor for the motion sensor shows the following:
| \/ |_ _/ ___| ___ _ __ ___ ___ _ __ ___ | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __| | | | | |_| |___| | __/ | | \__ \ _ | | \__ \ |_| |_|\__, |____/ \___|_| |_|___/\___/|_| |___/ |___/ 2.3.2 16 MCO:BGN:INIT NODE,CP=RSNNA---,FQ=16,REL=255,VER=2.3.2 26 TSM:INIT 28 TSF:WUR:MS=0 29 TSM:INIT:TSP OK 31 TSM:FPAR 33 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 2041 !TSM:FPAR:NO REPLY 2043 TSM:FPAR 2045 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 4054 !TSM:FPAR:NO REPLY 4056 TSM:FPAR 4058 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 6066 !TSM:FPAR:NO REPLY 6068 TSM:FPAR 6070 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 8078 !TSM:FPAR:FAIL 8079 TSM:FAIL:CNT=1 8081 TSM:FAIL:DIS 8083 TSF:TDI:TSL 18085 TSM:FAIL:RE-INIT 18087 TSM:INIT 18088 TSM:INIT:TSP OKGateway 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-2019 Sensnology AB * Full contributor list: https://github.com/mysensors/MySensors/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. * ******************************* * * DESCRIPTION * The RS485 Gateway prints data received from sensors on the serial link. * The gateway accepts input on seral which will be sent out on * the RS485 link. * * Wire connections (OPTIONAL): * - Inclusion button should be connected between digital pin 3 and GND * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series * * LEDs (OPTIONAL): * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly * - ERR (red) - fast blink on error during transmission error or receive crc error * * If your Arduino board has additional serial ports * you can use to connect the RS485 module. * Otherwise, the gateway uses AltSoftSerial to handle two serial * links on one Arduino. Use the following pins for RS485 link * * Board Transmit Receive PWM Unusable * ----- -------- ------- ------------ * Teensy 3.0 & 3.1 21 20 22 * Teensy 2.0 9 10 (none) * Teensy++ 2.0 25 4 26, 27 * Arduino Uno 9 8 10 * Arduino Leonardo 5 13 (none) * Arduino Mega 46 48 44, 45 * Wiring-S 5 6 4 * Sanguino 13 14 12 * */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable RS485 transport layer #define MY_RS485 // Define this to enables DE-pin management on defined pin #define MY_RS485_DE_PIN 2 // Set RS485 baud rate to use #define MY_RS485_BAUD_RATE 115200 // Enable this if RS485 is connected to a hardware serial port #define MY_RS485_HWSERIAL Serial // Enable serial gateway #define MY_GATEWAY_SERIAL // 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 #define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin #define MY_DEFAULT_RX_LED_PIN 5 // Receive led pin #define MY_DEFAULT_TX_LED_PIN 6 // the PCB, on board LED #include <MySensors.h> void setup() { // Setup locally attached sensors } void presentation() { // Present locally attached sensors } void loop() { // Send locally attached sensor data here }Motion detector 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-2019 Sensnology AB * Full contributor list: https://github.com/mysensors/MySensors/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 * * DESCRIPTION * This is an example of sensors using RS485 as transport layer * * Motion Sensor example using HC-SR501 * http://www.mysensors.org/build/motion * * If your Arduino board has additional serial ports * you can use to connect the RS485 module. * Otherwise, the transport uses AltSoftSerial to handle two serial * links on one Arduino. Use the following pins for RS485 link * * Board Transmit Receive PWM Unusable * ----- -------- ------- ------------ * Teensy 3.0 & 3.1 21 20 22 * Teensy 2.0 9 10 (none) * Teensy++ 2.0 25 4 26, 27 * Arduino Uno 9 8 10 * Arduino Leonardo 5 13 (none) * Arduino Mega 46 48 44, 45 * Wiring-S 5 6 4 * Sanguino 13 14 12 * * */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable RS485 transport layer #define MY_RS485 // Define this to enables DE-pin management on defined pin #define MY_RS485_DE_PIN 2 // Set RS485 baud rate to use #define MY_RS485_BAUD_RATE 115200 // Enable this if RS485 is connected to a hardware serial port //#define MY_RS485_HWSERIAL Serial #include <MySensors.h> uint32_t SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds) #define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your motion sensor. (Only 2 and 3 generates interrupt!) #define MY_NODE_ID 123 #define CHILD_ID 1 // Id of the sensor child // Initialize motion message MyMessage msg(CHILD_ID, V_TRIPPED); void setup() { pinMode(DIGITAL_INPUT_SENSOR, INPUT); // sets the motion sensor digital pin as input } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Motion Sensor", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_MOTION); } void loop() { // Read digital motion value bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; Serial.println(tripped); send(msg.set(tripped?"1":"0")); // Send tripped value to gw // Sleep until interrupt comes in on motion sensor. Send update every two minute. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); }To rule out hardware failure, I followed this tutorial, and all works as expected:
https://naylampmechatronics.com/blog/37_Comunicación-RS485-con-Arduino.htmlTransmitter sketch:
const int ledPin = 13; // Built-in LED const int EnTxPin = 2; // HIGH:Transmitter, LOW:Receiver void setup() { Serial.begin(9600); Serial.setTimeout(100); pinMode(ledPin, OUTPUT); pinMode(EnTxPin, OUTPUT); digitalWrite(ledPin, LOW); digitalWrite(EnTxPin, HIGH); } void loop() { int rdata = analogRead(0); //data from potentiometer int angle= map(rdata, 0, 1023, 0, 180); //transmitter data packet Serial.print("I"); //initiate data packet Serial.print("S"); //code for servo Serial.print(angle); //servo angle data Serial.print("F"); //finish data packet delay(50); //receiver data packet Serial.print("I"); //initiate data packet Serial.print("L"); //code for sensor Serial.print("F"); //finish data packet Serial.flush(); digitalWrite(EnTxPin, LOW); //RS485 as receiver if(Serial.find("i")) { int data=Serial.parseInt(); if(Serial.read()=='f') //finish reading { onLED(data); } } digitalWrite(EnTxPin, HIGH); //RS485 as transmitter } void onLED(int data) { if(data>500) digitalWrite(ledPin, HIGH); else digitalWrite(ledPin, LOW); }Reciever sketch:
#include <Servo.h> Servo myservo; const int EnTxPin = 2; void setup () { Serial.begin (9600); myservo.attach (9); pinMode(EnTxPin, OUTPUT ); digitalWrite (EnTxPin, LOW ); } void loop (){ if ( Serial.available ()){ if ( Serial.read () == 'I' ){ char function = Serial.read (); if (function == 'S' ){ int angle = Serial.parseInt (); if ( Serial.read () == 'F' ){ if (angle <= 180) { myservo.write (angle); } } } else if (function == 'L' ){ if ( Serial.read () == 'F' ){ int val = analogRead (0); digitalWrite (EnTxPin, HIGH ); //enable to transmit Serial.print ( "i" ); Serial.print (val); Serial.println ( "f" ); Serial.flush (); digitalWrite (EnTxPin, LOW ); //enable to receive } } } } delay (10); }Any ideas about what might be causing the issue?
-
Hardware: Arduino nano boards+ RS485 devices with separate 5 volt power supply
I am trying to set up my 1st Rs485 gateway motion sensor on Home Assistant, per the following tutorial:
https://www.mysensors.org/build/rs485The motion sensor is not presenting itself to the gateway, so I did some digging and found this thread on the subject:
https://forum.mysensors.org/topic/11048/mqtt-ethernet-gateway-with-wired-rs485-network.
I have things wired up as per this pic provided in the tutorial
Although I am not using mqtt, everything seemed to be pertinent but I was still unable to get communication between the sensor and gateway.
Ha logs show the gateway seems to be happy:
[mysensors] Connected to Serial<id=0x7f2fd0c2f518, open=True>(port='/dev/ttyUSB0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=0, xonxoff=False, rtscts=False, dsrdtr=False) 2020-10-05 13:17:05 INFO (MainThread) [mysensors] Connected to <_SelectorSocketTransport fd=25 read=idle write=<idle, bufsize=0>> p:Gateway startup complete.However serial monitor for the motion sensor shows the following:
| \/ |_ _/ ___| ___ _ __ ___ ___ _ __ ___ | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __| | | | | |_| |___| | __/ | | \__ \ _ | | \__ \ |_| |_|\__, |____/ \___|_| |_|___/\___/|_| |___/ |___/ 2.3.2 16 MCO:BGN:INIT NODE,CP=RSNNA---,FQ=16,REL=255,VER=2.3.2 26 TSM:INIT 28 TSF:WUR:MS=0 29 TSM:INIT:TSP OK 31 TSM:FPAR 33 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 2041 !TSM:FPAR:NO REPLY 2043 TSM:FPAR 2045 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 4054 !TSM:FPAR:NO REPLY 4056 TSM:FPAR 4058 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 6066 !TSM:FPAR:NO REPLY 6068 TSM:FPAR 6070 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 8078 !TSM:FPAR:FAIL 8079 TSM:FAIL:CNT=1 8081 TSM:FAIL:DIS 8083 TSF:TDI:TSL 18085 TSM:FAIL:RE-INIT 18087 TSM:INIT 18088 TSM:INIT:TSP OKGateway 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-2019 Sensnology AB * Full contributor list: https://github.com/mysensors/MySensors/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. * ******************************* * * DESCRIPTION * The RS485 Gateway prints data received from sensors on the serial link. * The gateway accepts input on seral which will be sent out on * the RS485 link. * * Wire connections (OPTIONAL): * - Inclusion button should be connected between digital pin 3 and GND * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series * * LEDs (OPTIONAL): * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly * - ERR (red) - fast blink on error during transmission error or receive crc error * * If your Arduino board has additional serial ports * you can use to connect the RS485 module. * Otherwise, the gateway uses AltSoftSerial to handle two serial * links on one Arduino. Use the following pins for RS485 link * * Board Transmit Receive PWM Unusable * ----- -------- ------- ------------ * Teensy 3.0 & 3.1 21 20 22 * Teensy 2.0 9 10 (none) * Teensy++ 2.0 25 4 26, 27 * Arduino Uno 9 8 10 * Arduino Leonardo 5 13 (none) * Arduino Mega 46 48 44, 45 * Wiring-S 5 6 4 * Sanguino 13 14 12 * */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable RS485 transport layer #define MY_RS485 // Define this to enables DE-pin management on defined pin #define MY_RS485_DE_PIN 2 // Set RS485 baud rate to use #define MY_RS485_BAUD_RATE 115200 // Enable this if RS485 is connected to a hardware serial port #define MY_RS485_HWSERIAL Serial // Enable serial gateway #define MY_GATEWAY_SERIAL // 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 #define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin #define MY_DEFAULT_RX_LED_PIN 5 // Receive led pin #define MY_DEFAULT_TX_LED_PIN 6 // the PCB, on board LED #include <MySensors.h> void setup() { // Setup locally attached sensors } void presentation() { // Present locally attached sensors } void loop() { // Send locally attached sensor data here }Motion detector 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-2019 Sensnology AB * Full contributor list: https://github.com/mysensors/MySensors/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 * * DESCRIPTION * This is an example of sensors using RS485 as transport layer * * Motion Sensor example using HC-SR501 * http://www.mysensors.org/build/motion * * If your Arduino board has additional serial ports * you can use to connect the RS485 module. * Otherwise, the transport uses AltSoftSerial to handle two serial * links on one Arduino. Use the following pins for RS485 link * * Board Transmit Receive PWM Unusable * ----- -------- ------- ------------ * Teensy 3.0 & 3.1 21 20 22 * Teensy 2.0 9 10 (none) * Teensy++ 2.0 25 4 26, 27 * Arduino Uno 9 8 10 * Arduino Leonardo 5 13 (none) * Arduino Mega 46 48 44, 45 * Wiring-S 5 6 4 * Sanguino 13 14 12 * * */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable RS485 transport layer #define MY_RS485 // Define this to enables DE-pin management on defined pin #define MY_RS485_DE_PIN 2 // Set RS485 baud rate to use #define MY_RS485_BAUD_RATE 115200 // Enable this if RS485 is connected to a hardware serial port //#define MY_RS485_HWSERIAL Serial #include <MySensors.h> uint32_t SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds) #define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your motion sensor. (Only 2 and 3 generates interrupt!) #define MY_NODE_ID 123 #define CHILD_ID 1 // Id of the sensor child // Initialize motion message MyMessage msg(CHILD_ID, V_TRIPPED); void setup() { pinMode(DIGITAL_INPUT_SENSOR, INPUT); // sets the motion sensor digital pin as input } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Motion Sensor", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_MOTION); } void loop() { // Read digital motion value bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; Serial.println(tripped); send(msg.set(tripped?"1":"0")); // Send tripped value to gw // Sleep until interrupt comes in on motion sensor. Send update every two minute. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); }To rule out hardware failure, I followed this tutorial, and all works as expected:
https://naylampmechatronics.com/blog/37_Comunicación-RS485-con-Arduino.htmlTransmitter sketch:
const int ledPin = 13; // Built-in LED const int EnTxPin = 2; // HIGH:Transmitter, LOW:Receiver void setup() { Serial.begin(9600); Serial.setTimeout(100); pinMode(ledPin, OUTPUT); pinMode(EnTxPin, OUTPUT); digitalWrite(ledPin, LOW); digitalWrite(EnTxPin, HIGH); } void loop() { int rdata = analogRead(0); //data from potentiometer int angle= map(rdata, 0, 1023, 0, 180); //transmitter data packet Serial.print("I"); //initiate data packet Serial.print("S"); //code for servo Serial.print(angle); //servo angle data Serial.print("F"); //finish data packet delay(50); //receiver data packet Serial.print("I"); //initiate data packet Serial.print("L"); //code for sensor Serial.print("F"); //finish data packet Serial.flush(); digitalWrite(EnTxPin, LOW); //RS485 as receiver if(Serial.find("i")) { int data=Serial.parseInt(); if(Serial.read()=='f') //finish reading { onLED(data); } } digitalWrite(EnTxPin, HIGH); //RS485 as transmitter } void onLED(int data) { if(data>500) digitalWrite(ledPin, HIGH); else digitalWrite(ledPin, LOW); }Reciever sketch:
#include <Servo.h> Servo myservo; const int EnTxPin = 2; void setup () { Serial.begin (9600); myservo.attach (9); pinMode(EnTxPin, OUTPUT ); digitalWrite (EnTxPin, LOW ); } void loop (){ if ( Serial.available ()){ if ( Serial.read () == 'I' ){ char function = Serial.read (); if (function == 'S' ){ int angle = Serial.parseInt (); if ( Serial.read () == 'F' ){ if (angle <= 180) { myservo.write (angle); } } } else if (function == 'L' ){ if ( Serial.read () == 'F' ){ int val = analogRead (0); digitalWrite (EnTxPin, HIGH ); //enable to transmit Serial.print ( "i" ); Serial.print (val); Serial.println ( "f" ); Serial.flush (); digitalWrite (EnTxPin, LOW ); //enable to receive } } } } delay (10); }Any ideas about what might be causing the issue?
@mrhutchinsonmn said in Motion Sensor not presenting to RS485 Gateway / TSM:FPAR:NO REPLY:
9600
Good catch.. That was an old version... both are set to 115200 after 9600 did not work
-
@mrhutchinsonmn said in Motion Sensor not presenting to RS485 Gateway / TSM:FPAR:NO REPLY:
9600
Good catch.. That was an old version... both are set to 115200 after 9600 did not work
@mrhutchinsonmn Might have confused the issue with my reply.. Neither 115200 nor 9600 baud rates resolve the communication issue.
-
The sketch uses MY_RS485_HWSERIAL but you say you have wired according to https://forum.mysensors.org/topic/11048/mqtt-ethernet-gateway-with-wired-rs485-network which uses pins 8 and 9?
Pins 8 and 9 are not the hardware serial pins.
@mfalkvidd Ugh!!! Too many versions of the sketch :)... Had to switch between my laptop and pc because of sketch upload issues.... Must have grabbed an old sketch.. I HAD commented hwserial out earlier... Getting communication now but not a valid message, not enough values to unpack errors. I will dig into that tomorrow. Thank you!!!
-
@mfalkvidd Ugh!!! Too many versions of the sketch :)... Had to switch between my laptop and pc because of sketch upload issues.... Must have grabbed an old sketch.. I HAD commented hwserial out earlier... Getting communication now but not a valid message, not enough values to unpack errors. I will dig into that tomorrow. Thank you!!!
-
Thank you for the advice!
I started over, just to be sure I didn't have anymore mix ups, but still have not been able to get the RS485 motion sensor and RS485 gateway to talk.
Hardware: Arduino Nanos+ RS485 modules.
Wiring:
RO = Pin 8 of Arduino
DI = Pin 9 of Arduino
A = A on other Nano
B = B on other Nano
DI= Pin 9 of Nano
RO = Pin 8 of Nano
DE & RE = Pin 2 of Nano
VCC = External power source
GND = External power sourceCurrent Gateway 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-2019 Sensnology AB * Full contributor list: https://github.com/mysensors/MySensors/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. * ******************************* * * DESCRIPTION * The RS485 Gateway prints data received from sensors on the serial link. * The gateway accepts input on seral which will be sent out on * the RS485 link. * * Wire connections (OPTIONAL): * - Inclusion button should be connected between digital pin 3 and GND * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series * * LEDs (OPTIONAL): * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly * - ERR (red) - fast blink on error during transmission error or receive crc error * * If your Arduino board has additional serial ports * you can use to connect the RS485 module. * Otherwise, the gateway uses AltSoftSerial to handle two serial * links on one Arduino. Use the following pins for RS485 link * * Board Transmit Receive PWM Unusable * ----- -------- ------- ------------ * Teensy 3.0 & 3.1 21 20 22 * Teensy 2.0 9 10 (none) * Teensy++ 2.0 25 4 26, 27 * Arduino Uno 9 8 10 * Arduino Leonardo 5 13 (none) * Arduino Mega 46 48 44, 45 * Wiring-S 5 6 4 * Sanguino 13 14 12 * */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable RS485 transport layer #define MY_RS485 // Define this to enables DE-pin management on defined pin #define MY_RS485_DE_PIN 2 // Set RS485 baud rate to use #define MY_RS485_BAUD_RATE 9600 // Enable this if RS485 is connected to a hardware serial port //#define MY_RS485_HWSERIAL Serial // Enable serial gateway #define MY_GATEWAY_SERIAL // 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 #define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin #define MY_DEFAULT_RX_LED_PIN 5 // Receive led pin #define MY_DEFAULT_TX_LED_PIN 6 // the PCB, on board LED #include <MySensors.h> void setup() { // Setup locally attached sensors } void presentation() { // Present locally attached sensors } void loop() { // Send locally attached sensor data here }Current Motion Detector 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-2019 Sensnology AB * Full contributor list: https://github.com/mysensors/MySensors/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 * * DESCRIPTION * This is an example of sensors using RS485 as transport layer * * Motion Sensor example using HC-SR501 * http://www.mysensors.org/build/motion * * If your Arduino board has additional serial ports * you can use to connect the RS485 module. * Otherwise, the transport uses AltSoftSerial to handle two serial * links on one Arduino. Use the following pins for RS485 link * * Board Transmit Receive PWM Unusable * ----- -------- ------- ------------ * Teensy 3.0 & 3.1 21 20 22 * Teensy 2.0 9 10 (none) * Teensy++ 2.0 25 4 26, 27 * Arduino Uno 9 8 10 * Arduino Leonardo 5 13 (none) * Arduino Mega 46 48 44, 45 * Wiring-S 5 6 4 * Sanguino 13 14 12 * * */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable RS485 transport layer #define MY_RS485 // Define this to enables DE-pin management on defined pin #define MY_RS485_DE_PIN 2 // Set RS485 baud rate to use #define MY_RS485_BAUD_RATE 9600 // Enable this if RS485 is connected to a hardware serial port //#define MY_RS485_HWSERIAL Serial1 #include <MySensors.h> uint32_t SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds) #define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your motion sensor. (Only 2 and 3 generates interrupt!) #define MY_NODE_ID 12 #define CHILD_ID 1 // Id of the sensor child // Initialize motion message MyMessage msg(CHILD_ID, V_TRIPPED); void setup() { pinMode(DIGITAL_INPUT_SENSOR, INPUT); // sets the motion sensor digital pin as input } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Motion Sensor", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_MOTION); } void loop() { // Read digital motion value bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; Serial.println(tripped); send(msg.set(tripped?"1":"0")); // Send tripped value to gw // Sleep until interrupt comes in on motion sensor. Send update every two minute. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); }Commented the following out on the gateway, as per other forum users recommendations ( but made no difference)
// 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 3Serial Monitor info:
21257 TSM:FAIL:CNT=7 321259 TSM:FAIL:DIS 321261 TSF:TDI:TSL 381263 TSM:FAIL:RE-INIT 381265 TSM:INIT 381266 TSM:INIT:TSP OK 381268 TSM:FPAR 381287 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 383295 !TSM:FPAR:NO REPLY 383297 TSM:FPAR 383315 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 385324 !TSM:FPAR:NO REPLY 385326 TSM:FPAR 385344 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 387352 !TSM:FPAR:NO REPLY 387354 TSM:FPAR 387373 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 389381 !TSM:FPAR:FAILIdeas?
-
Thank you for the advice!
I started over, just to be sure I didn't have anymore mix ups, but still have not been able to get the RS485 motion sensor and RS485 gateway to talk.
Hardware: Arduino Nanos+ RS485 modules.
Wiring:
RO = Pin 8 of Arduino
DI = Pin 9 of Arduino
A = A on other Nano
B = B on other Nano
DI= Pin 9 of Nano
RO = Pin 8 of Nano
DE & RE = Pin 2 of Nano
VCC = External power source
GND = External power sourceCurrent Gateway 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-2019 Sensnology AB * Full contributor list: https://github.com/mysensors/MySensors/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. * ******************************* * * DESCRIPTION * The RS485 Gateway prints data received from sensors on the serial link. * The gateway accepts input on seral which will be sent out on * the RS485 link. * * Wire connections (OPTIONAL): * - Inclusion button should be connected between digital pin 3 and GND * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series * * LEDs (OPTIONAL): * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly * - ERR (red) - fast blink on error during transmission error or receive crc error * * If your Arduino board has additional serial ports * you can use to connect the RS485 module. * Otherwise, the gateway uses AltSoftSerial to handle two serial * links on one Arduino. Use the following pins for RS485 link * * Board Transmit Receive PWM Unusable * ----- -------- ------- ------------ * Teensy 3.0 & 3.1 21 20 22 * Teensy 2.0 9 10 (none) * Teensy++ 2.0 25 4 26, 27 * Arduino Uno 9 8 10 * Arduino Leonardo 5 13 (none) * Arduino Mega 46 48 44, 45 * Wiring-S 5 6 4 * Sanguino 13 14 12 * */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable RS485 transport layer #define MY_RS485 // Define this to enables DE-pin management on defined pin #define MY_RS485_DE_PIN 2 // Set RS485 baud rate to use #define MY_RS485_BAUD_RATE 9600 // Enable this if RS485 is connected to a hardware serial port //#define MY_RS485_HWSERIAL Serial // Enable serial gateway #define MY_GATEWAY_SERIAL // 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 #define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin #define MY_DEFAULT_RX_LED_PIN 5 // Receive led pin #define MY_DEFAULT_TX_LED_PIN 6 // the PCB, on board LED #include <MySensors.h> void setup() { // Setup locally attached sensors } void presentation() { // Present locally attached sensors } void loop() { // Send locally attached sensor data here }Current Motion Detector 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-2019 Sensnology AB * Full contributor list: https://github.com/mysensors/MySensors/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 * * DESCRIPTION * This is an example of sensors using RS485 as transport layer * * Motion Sensor example using HC-SR501 * http://www.mysensors.org/build/motion * * If your Arduino board has additional serial ports * you can use to connect the RS485 module. * Otherwise, the transport uses AltSoftSerial to handle two serial * links on one Arduino. Use the following pins for RS485 link * * Board Transmit Receive PWM Unusable * ----- -------- ------- ------------ * Teensy 3.0 & 3.1 21 20 22 * Teensy 2.0 9 10 (none) * Teensy++ 2.0 25 4 26, 27 * Arduino Uno 9 8 10 * Arduino Leonardo 5 13 (none) * Arduino Mega 46 48 44, 45 * Wiring-S 5 6 4 * Sanguino 13 14 12 * * */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable RS485 transport layer #define MY_RS485 // Define this to enables DE-pin management on defined pin #define MY_RS485_DE_PIN 2 // Set RS485 baud rate to use #define MY_RS485_BAUD_RATE 9600 // Enable this if RS485 is connected to a hardware serial port //#define MY_RS485_HWSERIAL Serial1 #include <MySensors.h> uint32_t SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds) #define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your motion sensor. (Only 2 and 3 generates interrupt!) #define MY_NODE_ID 12 #define CHILD_ID 1 // Id of the sensor child // Initialize motion message MyMessage msg(CHILD_ID, V_TRIPPED); void setup() { pinMode(DIGITAL_INPUT_SENSOR, INPUT); // sets the motion sensor digital pin as input } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Motion Sensor", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_MOTION); } void loop() { // Read digital motion value bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; Serial.println(tripped); send(msg.set(tripped?"1":"0")); // Send tripped value to gw // Sleep until interrupt comes in on motion sensor. Send update every two minute. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); }Commented the following out on the gateway, as per other forum users recommendations ( but made no difference)
// 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 3Serial Monitor info:
21257 TSM:FAIL:CNT=7 321259 TSM:FAIL:DIS 321261 TSF:TDI:TSL 381263 TSM:FAIL:RE-INIT 381265 TSM:INIT 381266 TSM:INIT:TSP OK 381268 TSM:FPAR 381287 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 383295 !TSM:FPAR:NO REPLY 383297 TSM:FPAR 383315 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 385324 !TSM:FPAR:NO REPLY 385326 TSM:FPAR 385344 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 387352 !TSM:FPAR:NO REPLY 387354 TSM:FPAR 387373 ?TSF:MSG:SEND,255-255-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 389381 !TSM:FPAR:FAILIdeas?
@mrhutchinsonmn At RS485, it's obligatory to assign NodeIDs within your sketch.
-
@mrhutchinsonmn At RS485, it's obligatory to assign NodeIDs within your sketch.
-
@electrik Yes... that worked!!! Moved node and child id above mysensors.h
Thank you!!!!
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login