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 <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.
    *
    *******************************
    *
    * DESCRIPTION
    * 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 MY_GATEWAY_SERIAL
    
    // 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
    #endif
    
    // Enable inclusion mode
    #define MY_INCLUSION_MODE_FEATURE
    // Enable Inclusion mode button on gateway
    //#define MY_INCLUSION_BUTTON_FEATURE
    
    // Inverses behavior of inclusion button (if using external pullup)
    //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
    
    // Set inclusion mode duration (in seconds)
    #define MY_INCLUSION_MODE_DURATION 60
    // Digital pin used for inclusion mode button
    //#define MY_INCLUSION_MODE_BUTTON_PIN  3
    
    // Set blinking period
    #define MY_DEFAULT_LED_BLINK_PERIOD 300
    
    // Inverses the behavior of leds
    //#define MY_WITH_LEDS_BLINKING_INVERSE
    
    // 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){
        beep();
        }
       
        
        }
     
       
       
        // Write some debug info
        Serial.print("Incoming change for sensor:");
        Serial.print(message.sensor);
        Serial.print(", New status: ");
        Serial.println(message.getBool());
      }
    
    
    void loop()
    {
    	
    }
    
    
    void beep()
    {
        tone(A0, 4200); //Wygeneruj sygnał o częstotliwości 4000Hz na pinie A5  
        wait(100);  
        noTone(A0);
        wait(100);
        tone(A0, 4200); //Wygeneruj sygnał o częstotliwości 4000Hz na pinie A5  
        wait(100);  
        noTone(A0);
        wait(10000);
    
    }```

  • Mod

    @scalpel this code

    while (message.getBool() == 1){
    beep();
    }
    

    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()?

    look

    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


 

382
Online

7.8k
Users

8.7k
Topics

92.9k
Posts