Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Development
  3. rfm69 and atc

rfm69 and atc

Scheduled Pinned Locked Moved Development
49 Posts 13 Posters 19.3k Views 12 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Fleischtorte

    @frencho @BenCranston
    This is my implementation of PR440

    first 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

    B Offline
    B Offline
    BenCranston
    wrote on last edited by
    #41

    @Fleischtorte Sweet!! This I can do. I'll make the changes and start testing tonight. thanks for the explicit help.

    -Ben

    frenchoF 1 Reply Last reply
    0
    • F Fleischtorte

      @frencho @BenCranston
      This is my implementation of PR440

      first 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

      frenchoF Offline
      frenchoF Offline
      frencho
      wrote on last edited by
      #42

      @Fleischtorte
      thanks for the details, I'll look into it, as soon as I have my RFM69 GW talking to my RFM69 node

      Your second life begins when you understand you only have one !

      1 Reply Last reply
      0
      • F Fleischtorte

        @frencho @BenCranston
        This is my implementation of PR440

        first 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

        frenchoF Offline
        frenchoF Offline
        frencho
        wrote on last edited by
        #43

        @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

        Your second life begins when you understand you only have one !

        1 Reply Last reply
        0
        • B BenCranston

          @Fleischtorte Sweet!! This I can do. I'll make the changes and start testing tonight. thanks for the explicit help.

          -Ben

          frenchoF Offline
          frenchoF Offline
          frencho
          wrote on last edited by
          #44

          @BenCranston did you get it to work ?

          Your second life begins when you understand you only have one !

          1 Reply Last reply
          0
          • F Offline
            F Offline
            Fleischtorte
            wrote on last edited by Fleischtorte
            #45

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

            1 Reply Last reply
            0
            • nagelcN Offline
              nagelcN Offline
              nagelc
              wrote on last edited by
              #46

              How is the ATC working out? I think it is a neat feature, but am reluctant to mess with the core MySensors libraries.

              1 Reply Last reply
              1
              • F Offline
                F Offline
                Fleischtorte
                wrote on last edited by
                #47

                hi ,

                it works but not very stable... after a while the sensors become offline so i revert to the stable version of MySensors.

                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  cablesky
                  wrote on last edited by
                  #48

                  how is the status now?? Works the ATC now?

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    scalz
                    Hardware Contributor
                    wrote on last edited by
                    #49

                    @cablesky
                    it is not included in Mysensors yet as it breaks compatibility with current packet protocol.
                    It's planned in an upcoming release, and working well ;)

                    1 Reply Last reply
                    0

                    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
                    Reply
                    • Reply as topic
                    Log in to reply
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes


                    16

                    Online

                    12.1k

                    Users

                    11.2k

                    Topics

                    113.4k

                    Posts


                    Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                    • Login

                    • Don't have an account? Register

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • MySensors
                    • OpenHardware.io
                    • Categories
                    • Recent
                    • Tags
                    • Popular