rfm69 and atc
-
@frencho @lafleur
sorry for this delay. i'm busy, running..sometimes i refresh myself doing some sw but I admit i spent more time on hw than looking how to cleanly do this PR. ouch :sweat: but for me it has to be hobby even if I'm always rushing myself.
you're not true ;) in fact mysensors team is not nrf24 only :)as soon as i can, i will look. it could be a bit time consuming as it would be my first PR, why i always delay..boo lazy i am :blush: The best way I think (as, now, I'm not up to date with dev branch, I will need diffchecking my stuff):
- I would start/improve PR437 with minor changes needed. As mysensors drivers compiles ok, i would do in this way than taking lowpowerlab lib first (all warnings enabled of course)
- then a separated for ATC + or another one for ListenMode. to have a better history and not breaking anything.
so, I would separate the PR. I don't know if you tried like this (if i'm overhead), or what were your PR issue. I will look a bit later for curiosity or in case I would run in similar issue hihi.
Cool if you have it working :)
-
@lafleur thanks for your work! On the weekend i was able to upgrade the driver and enable ATC with RSSI-Report. With the instructions from PR440 it was very easy :thumbsup:
-
@lafleur thanks for your work! On the weekend i was able to upgrade the driver and enable ATC with RSSI-Report. With the instructions from PR440 it was very easy :thumbsup:
@Fleischtorte would you accept to share the work ? I started to play with the RFM69, but didn't get to the ATC part yet. It could save me a couple of hours, and debug ^^
-
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.