Skip to content

Latest commit

 

History

History
285 lines (241 loc) · 11.7 KB

README.md

File metadata and controls

285 lines (241 loc) · 11.7 KB

Build a RFLink Wi-Fi Gateway (Radio Frequency Link Board)

using "Nodo Shop RFLink (433 Mhz) board" and "RobotDyn MEGA+WiFi R3 ATmega2560+ESP8266"

BuyMeCoffee

The project can help you to build a RFLink Gateway useful to integrate RF devices in your preferred home automation system.

The project core component is the firmware by Stuntteam that allows sniffing and sending 433 MHz radio frequencies frames. The frames are organized according to specific IOT protocols. The RFLink firmware is developed to run on the Arduino Mega board and it uses the USB port to communicate, no other communication interface is available.

To expose the RFLink Gateway (Arduino board) through Wi-Fi rather than USB, we can use an ESP8266-01 module. It is equipped with a customized firmware based on the ESPurna that is adapted to interface the RFLink Gateway. To simplify this integration we will use a customized board containing both Arduino Mega and ESP8266. This board is produced by RobotDyn.com. The customized firmware, based on ESPurna, will be used to expose the RFLink data through a web service.

In the following, the use hardware and software are shown, as well as the steps to assemble the gateway.

Hardware

The project is realized using the following hardware:

RFLink 433.92 MHz Gateway components
Components for building a RFlink Gateway: a 433 MHz Transceiver from Aurel, various type headers, SMA connector and a pcb.
Antenna SMA for 433 MHz
433 MHz antenna
RFLink 433.92 MHz Gateway components Antenna SMA for 433 MHz
MEGA+WiFi R3 ATmega2560+ESP8266, flash 32Mb, USB-TTL CH340G, Micro-USB
Customized version of the classic ARDUINO MEGA R3 board.
MEGA+WiFi R3 ATmega2560+ESP8266, flash 32Mb, USB-TTL CH340G, Micro-USB

Software

  1. RFLink Gateway
    RFLink Firmware for Arduino MEGA (Version R48 is used in this project)
  2. ESPurna Firmware for ESP8285/ESP8266
    ESPurna Firmware (Version 1.13.5 is used in this project)
    NB Platformio is recommended to build ESPurna customized firmware, for more details see the ESPurna wiki page
  3. NodeJs rflink bridge for Home Assistant

Instructions

The following instruction explain how build your personal rflink Wi-Fi Gateway.
  1. Download the rflink firmware
  2. Unpack the zip file and get ready to burn it
  3. Set the MEGA+WiFi R3 ATmega2560+ESP8266 board dip switch to sketch upload mode. For details see the full dip switch modes.
    Mode 1 2 3 4 5 6 7 8 RXD/TXD
    USB <-> ATmega2560 (upload sketch) --- --- ON ON --- --- --- NoUSE 0
  4. Upload the rflink Gateway firmware using
    avrdude -v -p atmega2560 -c stk500 -P /dev/cu.usbmodem411 -b 115200 -D -U flash:w:RFLink.cpp.hex:i -C avrdude.conf
    

    On OSX with Arduino

    /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -v -p atmega2560 -c stk500 -P /dev/cu.usbmodem411 -b 115200 -D -U flash:w:RFLink.cpp.hex:i -C /Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf    
    

    NB If necessary, replace /dev/cu.usbmodem411 with the USB port used to connect your device.

  5. Clone ESPurna repository using
    git clone --branch 1.13.5 https://github.com/xoseperez/espurna.git
    

    NB In this project I use ESPurna firmware 1.13.5

  6. Customize the ESPurna firmware using the code located in the folder espurna_firmware_custom_code
    • copy custom.h into the folder code/espurna/config/

    • copy robotdyn_atmega2560_esp8266.h into the folder code/espurna/libs/

    • copy robotdyn_atmega2560_esp8266.ino into the folder code/espurna/

    • in the folder code/ open the file platformio.ini, so put the following text under GENERIC OTA ENVIRONMENTS session

    [env:generic-robotdyn-atmega2560-esp8266]
    platform = ${common.platform}
    framework = ${common.framework}
    board = ${common.board_1m}
    board_build.flash_mode = ${common.flash_mode}
    lib_deps = ${common.lib_deps}
    lib_ignore = ${common.lib_ignore}
    build_flags = ${common.build_flags_1m0m} -DUSE_CUSTOM_H
    monitor_speed = ${common.monitor_speed}
    extra_scripts = ${common.extra_scripts}
    
    • in the file platformio.ini, find lib_deps = so replace ArduinoJson with https://github.com/bblanchon/ArduinoJson#v5.13.5
  7. Go to in the folder **code/** and build the firmware using the command
    ./build.sh generic-robotdyn-atmega2560-esp8266
    

    NB Depending on your environment, the build process may be interrupted due to errors. In this cases,it is necessary to satisfy the missing dependencies and rerun the build.

    After the successful build, you can found the customized firmware in the folder firmware/espurna-1.13.5/

  8. Set the MEGA+WiFi R3 ATmega2560+ESP8266 board dip switch to sketch upload mode
    Mode 1 2 3 4 5 6 7 8 RXD/TXD
    USB <-> ESP8266 (upload sketch) --- --- --- --- ON ON ON NoUSE 0
  9. Upload the ESPurna custom firmware using
    esptool.py --port /dev/cu.wchusbserial1410 write_flash --flash_size 1MB --flash_mode dout 0x00000 espurna-1.13.6-dev-generic-robotdyn-atmega2560-esp8266.bin
    
  10. Set the MEGA+WiFi R3 ATmega2560+ESP8266 board dip switch to cooperation mode
    Mode 1 2 3 4 5 6 7 8 RXD/TXD
    USB <-> Mega2560 <-> ESP8266 (COM3) ON ON ON ON --- --- --- NoUSE 0

    Change of connecting port between ATmega2560 and ESP8266 setting the switch to RXD0 <-> TXD0

  11. Connect the power adapter and configure the rflink gateway using the web interface; for more details see the ESPurna wiki page.

Home Assistant integration (Optional, linux systems only)

Home Assistant is an open source home automation platform. If you use this platform and you want to interface the RFLink Wi-Fi Gateway then you must follow some simple steps.

  1. Copy the folder home_assistant_rflink_nodejs_bridge into your Home Assistant system
  2. Add the following line:
    @reboot <script full path>/espurna_rflink_bridge.sh >/dev/null 2>&1
    */5 * * * * source <user home>/.bashrc; <script full path>/espurna_rflink_bridge.sh >><user home>/espurna_rflink_bridge.log 2>&1

    to crontab Home Assistant user by replacing <script full path> with the real full script path.

  3. Configure the NodeJs bridge changing the file espurna_rflink_bridge.json
    NodeJs bridge properties
    Attribute name Default Note
    port 7373 Bridge local port
    polling_mills 60000 RFLink Gateway polling time
    reset_minute 480 RFLink Gateway restart command time
    NodeJs RFLink properties for HTTP protocol
    Attribute name Default Note
    protocol http ESPurna support for http
    host RFLink device host name or IP Address
    port 80 RFLink device web service port
    uri /api/rflink Not change, RFLink device web service uri
    apikey RFLink device web service api key

    JSON Examples:

    {
      "rflink" : {
        "protocol" : "http",
        "host" : "192.168.1.77",
        "port" : "80",
        "options" : {
          "uri": "/api/rflink",
          "apikey": "7EE7A415EB877244"
        }
      },
    
      "bridge" : {
        "port" : "7373",
        "polling_mills" : 60000,
        "reset_minute" : 480
      }
    }
    NodeJs RFLink properties for MQTT protocol

    Before use MQTT bridge you must install support library using npm install mqtt -g, so add to your user .bashrc export NODE_PATH=$(npm root -g).

    Attribute name Default Note
    protocol mqtt ESPurna support for mqtt
    host MQTT server host
    port 1883 MQTT service port
    username MQTT credential
    password MQTT credential
    clientId MQTT client ID
    clean MQTT true, set to false to receive QoS 1 and 2 messages while offline
    qos MQTT QoS
    topic MQTT the topic to publish

    JSON Examples:

    {
      "rflink" : {
        "protocol" : "mqtt",
        "host" : "localhost",
        "port" : "1883",
        "options" : {
          "username" : "rflinkserialbridge",
          "password" : "password",
          "clientId" : "rflinkserialbridge",
          "clean" : "true",
          "qos": 2,
          "topic": "rflinkgateway"
        }
      },
    
      "bridge" : {
        "port" : "7373",
        "polling_mills" : 60000,
        "reset_minute" : 480
      }
    }
  4. Configure the Home Assistant RFLink component

    rflink:
      host: localhost
      port: 7373
      wait_for_ack: false
      reconnect_interval: 60