rfm69 and atc
-
It's great to see that you got it all working from the PR440. I hope others will find your work useful....
I'm my test,it works very well.....
@lafleur @Fleischtorte @frencho I think I'm a bit dense today. I don't understand where the code currently sits in terms of something that could be tested. I see that PR440 was closed and referenced to go back to PR437 or open a new PR? I'd love to give ATC code a go on my RFM69HW's. Is it being integrated into the development branch? How would I go about testing at this time? I did a quick look at the codebase in git and there is no mention of ATC in the MySensors dev branch... A quick diff of the RFM69.cpp code from Felix and MySensors shows a few differences, so they are not 100% in sync. Alas, I'm at a loss on how to apply the work already done to test.. I can "git clone" like a banshee, but beyond that I'm lost with Jenkins. Sorry, again, dense today...
Any advice on how I can help is appreciated. I can test pretty easily. All of my nodes are Moteino's with RFM69HW radios.
Thanks again for everyone's efforts and work to make ATC a reality in the MySensors codebase!
-
@frencho @BenCranston
This is my implementation of PR440first download new RFM69 driver from LowPowerLab https://github.com/LowPowerLab/RFM69/archive/master.zip
Replace the files from libraries\MySensors\drivers\RFM69 (copy all and replace)Change in file RFM69.cpp line 31-32
#include <RFM69.h> #include <RFM69registers.h>to
#include "RFM69.h" #include "RFM69registers.h"in RFM69_ATC.cpp line 32-34
#include <RFM69_ATC.h> #include <RFM69.h> // include the RFM69 library files as well #include <RFM69registers.h>to
#include "RFM69_ATC.h" #include "RFM69.h" // include the RFM69 library files as well #include "RFM69registers.h"i think this was the driver..
next was mysensors
in file libraries/MySensors/MySensor.h line 268
#include "drivers/RFM69/RFM69_ATC.cpp"in file libraries/MySensors/core/MyTransportRFM69.cpp
first in line 24#include "drivers/RFM69/RFM69_ATC.h"line 25-26
RFM69 _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); uint8_t _address;to
#ifdef MY_RFM69_Enable_ATC RFM69_ATC _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); #else RFM69 _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); #endif uint8_t _address;and line 53 idk if this is necessary
return _radio.sendWithRetry(to,data,len);to
return _radio.sendWithRetry(to,data,len,5);btw i use not the dev version
https://github.com/mysensors/MySensors/pull/440 see comment from trlafleur
there is my testing node (molgan PIR )
/** * 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 * * DESCRIPTION * Motion Sensor example using HC-SR501 * http://www.mysensors.org/build/motion * */ // Enable debug prints #define MY_DEBUG // Enable and select radio type attached #define MY_NODE_ID 4 #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RF69_868MHZ #define MY_RFM69_NETWORKID 121 #define MY_RFM69_ENABLE_ENCRYPTION #define MY_RFM69_Enable_ATC #include <SPI.h> #include <MySensors.h> unsigned long 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 CHILD_ID 1 // Id of the sensor child #define CHILD_ID_RSSI 7 // Id for RSSI Value // Initialize motion message MyMessage msg(CHILD_ID, V_TRIPPED); // Initialize RSSI message MyMessage rssiMsg(CHILD_ID_RSSI,V_TEXT); void setup() { #ifdef MY_RFM69_Enable_ATC _radio.enableAutoPower(-70); Serial.println("ATC Aktiviert"); #endif 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("Molgan-PIR", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_DOOR); present(CHILD_ID_RSSI, S_INFO); } void loop() { // Read digital motion value boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; Serial.println(tripped); send(msg.set(tripped?"1":"0")); // Send tripped value to gw int var1 = _radio.RSSI; send(rssiMsg.set(var1)); // Send RSSI value to gw // Sleep until interrupt comes in on motion sensor. Send update every two minute. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); }i hope this helps :) im just learing mysensors & co :expressionless:
david
-
@frencho @BenCranston
This is my implementation of PR440first download new RFM69 driver from LowPowerLab https://github.com/LowPowerLab/RFM69/archive/master.zip
Replace the files from libraries\MySensors\drivers\RFM69 (copy all and replace)Change in file RFM69.cpp line 31-32
#include <RFM69.h> #include <RFM69registers.h>to
#include "RFM69.h" #include "RFM69registers.h"in RFM69_ATC.cpp line 32-34
#include <RFM69_ATC.h> #include <RFM69.h> // include the RFM69 library files as well #include <RFM69registers.h>to
#include "RFM69_ATC.h" #include "RFM69.h" // include the RFM69 library files as well #include "RFM69registers.h"i think this was the driver..
next was mysensors
in file libraries/MySensors/MySensor.h line 268
#include "drivers/RFM69/RFM69_ATC.cpp"in file libraries/MySensors/core/MyTransportRFM69.cpp
first in line 24#include "drivers/RFM69/RFM69_ATC.h"line 25-26
RFM69 _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); uint8_t _address;to
#ifdef MY_RFM69_Enable_ATC RFM69_ATC _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); #else RFM69 _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); #endif uint8_t _address;and line 53 idk if this is necessary
return _radio.sendWithRetry(to,data,len);to
return _radio.sendWithRetry(to,data,len,5);btw i use not the dev version
https://github.com/mysensors/MySensors/pull/440 see comment from trlafleur
there is my testing node (molgan PIR )
/** * 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 * * DESCRIPTION * Motion Sensor example using HC-SR501 * http://www.mysensors.org/build/motion * */ // Enable debug prints #define MY_DEBUG // Enable and select radio type attached #define MY_NODE_ID 4 #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RF69_868MHZ #define MY_RFM69_NETWORKID 121 #define MY_RFM69_ENABLE_ENCRYPTION #define MY_RFM69_Enable_ATC #include <SPI.h> #include <MySensors.h> unsigned long 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 CHILD_ID 1 // Id of the sensor child #define CHILD_ID_RSSI 7 // Id for RSSI Value // Initialize motion message MyMessage msg(CHILD_ID, V_TRIPPED); // Initialize RSSI message MyMessage rssiMsg(CHILD_ID_RSSI,V_TEXT); void setup() { #ifdef MY_RFM69_Enable_ATC _radio.enableAutoPower(-70); Serial.println("ATC Aktiviert"); #endif 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("Molgan-PIR", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_DOOR); present(CHILD_ID_RSSI, S_INFO); } void loop() { // Read digital motion value boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; Serial.println(tripped); send(msg.set(tripped?"1":"0")); // Send tripped value to gw int var1 = _radio.RSSI; send(rssiMsg.set(var1)); // Send RSSI value to gw // Sleep until interrupt comes in on motion sensor. Send update every two minute. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); }i hope this helps :) im just learing mysensors & co :expressionless:
david
@Fleischtorte Sweet!! This I can do. I'll make the changes and start testing tonight. thanks for the explicit help.
-Ben
-
@frencho @BenCranston
This is my implementation of PR440first download new RFM69 driver from LowPowerLab https://github.com/LowPowerLab/RFM69/archive/master.zip
Replace the files from libraries\MySensors\drivers\RFM69 (copy all and replace)Change in file RFM69.cpp line 31-32
#include <RFM69.h> #include <RFM69registers.h>to
#include "RFM69.h" #include "RFM69registers.h"in RFM69_ATC.cpp line 32-34
#include <RFM69_ATC.h> #include <RFM69.h> // include the RFM69 library files as well #include <RFM69registers.h>to
#include "RFM69_ATC.h" #include "RFM69.h" // include the RFM69 library files as well #include "RFM69registers.h"i think this was the driver..
next was mysensors
in file libraries/MySensors/MySensor.h line 268
#include "drivers/RFM69/RFM69_ATC.cpp"in file libraries/MySensors/core/MyTransportRFM69.cpp
first in line 24#include "drivers/RFM69/RFM69_ATC.h"line 25-26
RFM69 _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); uint8_t _address;to
#ifdef MY_RFM69_Enable_ATC RFM69_ATC _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); #else RFM69 _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); #endif uint8_t _address;and line 53 idk if this is necessary
return _radio.sendWithRetry(to,data,len);to
return _radio.sendWithRetry(to,data,len,5);btw i use not the dev version
https://github.com/mysensors/MySensors/pull/440 see comment from trlafleur
there is my testing node (molgan PIR )
/** * 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 * * DESCRIPTION * Motion Sensor example using HC-SR501 * http://www.mysensors.org/build/motion * */ // Enable debug prints #define MY_DEBUG // Enable and select radio type attached #define MY_NODE_ID 4 #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RF69_868MHZ #define MY_RFM69_NETWORKID 121 #define MY_RFM69_ENABLE_ENCRYPTION #define MY_RFM69_Enable_ATC #include <SPI.h> #include <MySensors.h> unsigned long 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 CHILD_ID 1 // Id of the sensor child #define CHILD_ID_RSSI 7 // Id for RSSI Value // Initialize motion message MyMessage msg(CHILD_ID, V_TRIPPED); // Initialize RSSI message MyMessage rssiMsg(CHILD_ID_RSSI,V_TEXT); void setup() { #ifdef MY_RFM69_Enable_ATC _radio.enableAutoPower(-70); Serial.println("ATC Aktiviert"); #endif 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("Molgan-PIR", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_DOOR); present(CHILD_ID_RSSI, S_INFO); } void loop() { // Read digital motion value boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; Serial.println(tripped); send(msg.set(tripped?"1":"0")); // Send tripped value to gw int var1 = _radio.RSSI; send(rssiMsg.set(var1)); // Send RSSI value to gw // Sleep until interrupt comes in on motion sensor. Send update every two minute. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); }i hope this helps :) im just learing mysensors & co :expressionless:
david
@Fleischtorte
thanks for the details, I'll look into it, as soon as I have my RFM69 GW talking to my RFM69 node -
@frencho @BenCranston
This is my implementation of PR440first download new RFM69 driver from LowPowerLab https://github.com/LowPowerLab/RFM69/archive/master.zip
Replace the files from libraries\MySensors\drivers\RFM69 (copy all and replace)Change in file RFM69.cpp line 31-32
#include <RFM69.h> #include <RFM69registers.h>to
#include "RFM69.h" #include "RFM69registers.h"in RFM69_ATC.cpp line 32-34
#include <RFM69_ATC.h> #include <RFM69.h> // include the RFM69 library files as well #include <RFM69registers.h>to
#include "RFM69_ATC.h" #include "RFM69.h" // include the RFM69 library files as well #include "RFM69registers.h"i think this was the driver..
next was mysensors
in file libraries/MySensors/MySensor.h line 268
#include "drivers/RFM69/RFM69_ATC.cpp"in file libraries/MySensors/core/MyTransportRFM69.cpp
first in line 24#include "drivers/RFM69/RFM69_ATC.h"line 25-26
RFM69 _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); uint8_t _address;to
#ifdef MY_RFM69_Enable_ATC RFM69_ATC _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); #else RFM69 _radio(MY_RF69_SPI_CS, MY_RF69_IRQ_PIN, MY_RFM69HW, MY_RF69_IRQ_NUM); #endif uint8_t _address;and line 53 idk if this is necessary
return _radio.sendWithRetry(to,data,len);to
return _radio.sendWithRetry(to,data,len,5);btw i use not the dev version
https://github.com/mysensors/MySensors/pull/440 see comment from trlafleur
there is my testing node (molgan PIR )
/** * 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 * * DESCRIPTION * Motion Sensor example using HC-SR501 * http://www.mysensors.org/build/motion * */ // Enable debug prints #define MY_DEBUG // Enable and select radio type attached #define MY_NODE_ID 4 #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RF69_868MHZ #define MY_RFM69_NETWORKID 121 #define MY_RFM69_ENABLE_ENCRYPTION #define MY_RFM69_Enable_ATC #include <SPI.h> #include <MySensors.h> unsigned long 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 CHILD_ID 1 // Id of the sensor child #define CHILD_ID_RSSI 7 // Id for RSSI Value // Initialize motion message MyMessage msg(CHILD_ID, V_TRIPPED); // Initialize RSSI message MyMessage rssiMsg(CHILD_ID_RSSI,V_TEXT); void setup() { #ifdef MY_RFM69_Enable_ATC _radio.enableAutoPower(-70); Serial.println("ATC Aktiviert"); #endif 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("Molgan-PIR", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_DOOR); present(CHILD_ID_RSSI, S_INFO); } void loop() { // Read digital motion value boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH; Serial.println(tripped); send(msg.set(tripped?"1":"0")); // Send tripped value to gw int var1 = _radio.RSSI; send(rssiMsg.set(var1)); // Send RSSI value to gw // Sleep until interrupt comes in on motion sensor. Send update every two minute. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME); }i hope this helps :) im just learing mysensors & co :expressionless:
david
@Fleischtorte is your code example working ? I mean do you see the RSSI going down to -70 ?
Cause on this page https://lowpowerlab.com/2015/11/11/rfm69_atc-automatic-transmission-control/ Felix says we must use a radio.sendwithretry ?!
I'm a little confused it not working so I'm digging -
@Fleischtorte Sweet!! This I can do. I'll make the changes and start testing tonight. thanks for the explicit help.
-Ben
@BenCranston did you get it to work ?
-
@Frencho radio.sendwithretry is used (see line 53 in libraries/MySensors/core/MyTransportRFM69.cpp) and ATC must be enabled on GW/Node (use _radio.enableAutoPower(-70); only on the node side).
It seems you need continous traffic to see the effect of ATC (i use a simple relay sketch which reports the rssi with every switch command). -
hi ,
it works but not very stable... after a while the sensors become offline so i revert to the stable version of MySensors.
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