Combination of gateway and relay code

  • Hi. I am an amateur programmer. I connected the buzzer to the gate and added the alarm functionality. It works but if the gateway gets some data from other sensor, the alarm stops working.

    * 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 <>
    * Copyright (C) 2013-2015 Sensnology AB
    * Full contributor list:
    * Documentation:
    * Support Forum:
    * 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.
    * The ArduinoGateway prints data received from sensors on the serial link.
    * The gateway accepts input on seral which will be sent out on radio network.
    * The GW code is designed for Arduino Nano 328p / 16MHz
    * 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):
    * - To use the feature, uncomment any of the MY_DEFAULT_xx_LED_PINs
    * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
    * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
    * - ERR (red) - fast blink on error during transmission error or recieve crc error
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    // Set LOW transmit power level as default, if you have an amplified NRF-module and
    // power your radio separately with a good regulator you can turn up PA level.
    #define MY_RF24_PA_LEVEL RF24_PA_LOW
    // Enable serial gateway
    // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
    #if F_CPU == 8000000L
    #define MY_BAUD_RATE 38400
    // Enable inclusion mode
    // Enable Inclusion mode button on gateway
    // Inverses behavior of inclusion button (if using external pullup)
    // Set inclusion mode duration (in seconds)
    // Digital pin used for inclusion mode button
    // Set blinking period
    // Inverses the behavior of leds
    // Flash leds on rx/tx/err
    // Uncomment to override default HW configurations
    //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
    //#define MY_DEFAULT_RX_LED_PIN  6  // Receive led pin
    //#define MY_DEFAULT_TX_LED_PIN  5  // the PCB, on board LED
    #include <MySensors.h>
    #define RELAY_1  3  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    #define NUMBER_OF_RELAYS 1 // Total number of attached relays
    #define RELAY_ON 1  // GPIO value to write to turn on attached relay
    #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
    void before()
        pinMode(RELAY_1, OUTPUT);
        // Set relay to last known state (using eeprom storage)
        digitalWrite(RELAY_1, LOW);
    void setup()
    	// Setup locally attached sensors
     pinMode(A0, OUTPUT);
    void presentation()
    	// Send the sketch version information to the gateway and Controller
      sendSketchInfo("Relay", "1.0");
      present(1, S_BINARY);
    void receive(const MyMessage &message)
      // We only expect one type of message from controller. But we better check anyway.
       if (message.type==V_STATUS) {
        while (message.getBool() == 1){
        // Write some debug info
        Serial.print("Incoming change for sensor:");
        Serial.print(", New status: ");
    void loop()
    void beep()
        tone(A0, 4200); //Wygeneruj sygnał o częstotliwości 4000Hz na pinie A5  
        tone(A0, 4200); //Wygeneruj sygnał o częstotliwości 4000Hz na pinie A5  

  • Mod

    @scalpel this code

    while (message.getBool() == 1){

    instructs the gateway to beep forever. There is no code in beep() that will change message, it will always be the same message.

  • But if gateway receive some data from sensors, example temperature it stop beeping. Maybe while function should be in loop()?


    2018-04-02 19:54:21.356 User: mietek initiated a switch command (771/Alarm/On) /<<---START BEEPING 👍
    2018-04-02 19:54:21.465 (ArduinoOdbiornik) Lighting 2 (Alarm)
    2018-04-02 19:54:21.588 Error: OTGW: Error received!
    2018-04-02 19:54:34.675 (OpenTherm) Temp (Control Setpoint)
    2018-04-02 19:54:34.682 (OpenTherm) General/Percentage (Maximum Relative Modulation Level)
    2018-04-02 19:54:34.688 (OpenTherm) Thermostat (Zadana ogrzewania)
    2018-04-02 19:54:34.694 (OpenTherm) General/Percentage (Modulacja palnika)
    2018-04-02 19:54:34.700 (OpenTherm) Temp (Isense)
    2018-04-02 19:54:34.708 (OpenTherm) Temp (Boiler Water Temperature)
    2018-04-02 19:54:34.714 (OpenTherm) Temp (DHW Temperature)
    2018-04-02 19:54:34.720 (OpenTherm) Temp (Outside Temperature)
    2018-04-02 19:54:34.725 (OpenTherm) Temp (Return Water Temperature)
    2018-04-02 19:54:34.731 (OpenTherm) Thermostat (DHW Setpoint)
    2018-04-02 19:54:34.735 (OpenTherm) Thermostat (Max_CH Water Setpoint)
    2018-04-02 19:54:51.739 Error: OTGW: Error received!
    2018-04-02 19:55:20.879 Error: OTGW: Error received!
    2018-04-02 19:55:21.434 (rflink) Temp (Zewnątrz)
    2018-04-02 19:55:32.899 (ArduinoOdbiornik) Temp (Parter) // <<--- STOP BEEPING👎

  • Mod

    @scalpel could you move the debug info prints in receive() to the beginning of receive() instead of the end, and re-run your test and post the result?

  • I will try tomorrow. Thanks

  • Need more tests, but looks like it works. Thanks

Log in to reply

Suggested Topics