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. Troubleshooting
  3. [Solved] Function repeater not working

[Solved] Function repeater not working

Scheduled Pinned Locked Moved Troubleshooting
16 Posts 3 Posters 4.0k Views 2 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.
  • D Daemon D

    @tekka

    #include "CyberLib.h" //Библиотека от Cyber-Place.ru
    #include <SPI.h>
    #include <Bounce2.h>
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    // Enable repeater functionality for this node
    #define MY_REPEATER_FEATURE
    
    #define ConsoleComm 0
    #define TIME_READ_INPUT_SEPIC_SIGN 1000 //время снятия показаний с входов
    #define TIME_SEND_VERA_SEPTIC 66000 //время для отправки данных септика
    #define TIME_SEND_VERA_SIGN 11000 //время для отправки данных сигнализации
    #define TIME_SEND_VERA_220 53100 //время для отправки данных 220
    #define RELAY_SIGN  6  // pin relay сигнализации
    #define DIGITAL_INPUT_SEPTIC 7   // The digital input D7 септик
    #define DIGITAL_INPUT_SIGN 8   // The digital input D8 сигнализация
    #define INTERRUPT_220V 3   // пин датчика наличия 220
    #define CHILD_VERA_SEPTIC 1   // Id Vera вирутального сенсора ошибки септика
    #define CHILD_VERA_SIGN 2   // Id  Vera вирутального сенсора срабатывания сигнализации 
    #define CHILD_VERA_220 3 // ID Vera вирутального сенсора наличия 220
    #define CHILD_VERA_RELAY_SIGN 4 // Id Vera реле сигнализации 
    #define CHILD_VERA_ROLLING 5 // Id Vera  рольставни
    #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
    
    //MySensor gw; // MySensor
    Bounce debouncerInputSeptic = Bounce();
    Bounce debouncerInputSign = Bounce();
    
    MyMessage errorMsgSeptic(CHILD_VERA_SEPTIC, V_TRIPPED); // виртуальный сенсор ошибки септика
    MyMessage errorMsgSign(CHILD_VERA_SIGN, V_TRIPPED); // виртуальный сенсор сигнализации
    MyMessage errorMsg220(CHILD_VERA_220, V_TRIPPED); // виртуальный сенсор 220
    
    int powerlostint; // храним нарастающим итогом переходы 0 по 220
    bool powerlost, valueSeptic, valueSign;
    unsigned long currentTime;
    unsigned long loopTimeRead, loopTimeSeptic, loopTimeSign, loopTime220;
    Metro timer_read = Metro(TIME_READ_INPUT_SEPIC_SIGN); // храним время опросов датчиков входов
    Metro time_send_septic = Metro(TIME_SEND_VERA_SEPTIC); // храним время отправки данных на Vera о септике
    Metro time_send_sign = Metro(TIME_SEND_VERA_SIGN); // храним время отправки данных на Vera о сигнализации
    Metro time_send_220 = Metro(TIME_SEND_VERA_220); // храним время отправки данных на Vera о 220
    
    void presentation()  {
    
     // Initialize library and add callback for incoming messages
      //  gw.begin(incomingMessage, AUTO, true); //repeater node
    
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Alarm Sensor", "1.0");
        present(CHILD_VERA_SEPTIC, S_MOTION); //alarm D7
        present(CHILD_VERA_SIGN, S_MOTION); //alarm D8
        present(CHILD_VERA_220, S_MOTION); //alarm 220
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_VERA_RELAY_SIGN, S_LIGHT); //relay D6
        present(CHILD_VERA_ROLLING, S_LIGHT); // вирутальное реле для рольставень
    
    }
    
    //********************обработчики прерываний*******************************
    void  detect_up() { // обработка внешнего прерывания. Сработает по переднему фронту
    
        powerlostint++; // если 50 раз в секунду получаем прерывание, увеличиваем powerlostint
    }
    
    
    //****************************SETUP*********************************************
    
    
    void setup() {
    
        UART_Init(115200);//инициализация последовательного порта
    #if ConsoleComm
        Serial << "Setup: " <<  endl;
    #endif
    
      
        // Then set relay pins in output mode
        pinMode(RELAY_SIGN, OUTPUT);
        // Set relay to last known state (using eeprom storage)
        D4_Out; //Настраиваем пин D4 на выход для управления рольставнями
        pinMode(DIGITAL_INPUT_SEPTIC, INPUT);  // определяем DIGITAL_INPUT_SEPTIC как вход
        digitalWrite(DIGITAL_INPUT_SEPTIC, HIGH);     // подключить подтягивающий резистор
        pinMode(DIGITAL_INPUT_SIGN, INPUT);  // определяем IGITAL_INPUT_SENSOR_D7 как вход
        digitalWrite(DIGITAL_INPUT_SIGN, HIGH);     // подключить подтягивающий резистор
    
        // After setting up the button, setup debouncer
        debouncerInputSeptic.attach(DIGITAL_INPUT_SEPTIC);
        debouncerInputSeptic.interval(5);
        debouncerInputSign.attach(DIGITAL_INPUT_SIGN);
        debouncerInputSign.interval(5);
    
    }
    
    //**************************** LOOP ********************************************************
    
    void loop() {
    
       // gw.process(); // By calling process() you route messages in the background
        debouncerInputSeptic.update();  // обновляем статус боунсера септика
        debouncerInputSign.update(); // обновляем статус боунсера сигнализации
    
        if (timer_read.check() == 1) ReadD(); // через TIME_READ_INPUT_SEPIC_SIGN запускаем ReadD()
        if (time_send_septic.check() == 1) SendVeraSeptic(); // через TIME_SEND_VERA_SEPTIC запускаем SendVeraSeptic()
        if (time_send_sign.check() == 1) SendVeraSign(); // через TIME_SEND_VERA_SIGN запускаем SendVeraSign()
        if (time_send_220.check() == 1) SendVera220(); // через TIME_SEND_VERA_220 запускаем SendVera220()
    
    
    }
    
    //************************ END LOOP **********************************************************
    
    //************************** ReadD() *********************************************************
    
    // считываем данные со входов
    
    void ReadD() {
    
        // Get the update value
        valueSeptic = debouncerInputSeptic.read();
    
        // Get the update value
        valueSign = debouncerInputSign.read();
    
        //valueSign = digitalRead(DIGITAL_INPUT_SIGN);
    #if ConsoleComm
        Serial << "valueSign: " << valueSign << endl;
        Serial << "valueSeptic: " << valueSeptic << endl;
        Serial << "powerlost: " << powerlost << endl;
    #endif
    
    }
    
    //******************************** END ReadD() ****************************************************
    
    //********************************* SendVeraSeptic() ***********************************************
    
    // отсылаем данные на Vera о септике
    void SendVeraSeptic() {
    #if ConsoleComm
        Serial << "SendVeraSeptic(): " << valueSeptic << endl;
    #endif
        send(errorMsgSeptic.set(valueSeptic ? "1" : "0")); // Send tripped value to gw
    
    }
    
    //********************************* END SendVeraSeptic() ***********************************************
    
    //********************************* SendVeraSign() ***********************************************
    
    // отсылаем данные на Vera о сигнализации
    void SendVeraSign() {
    #if ConsoleComm
        Serial << "SendVeraSign(): " << valueSign << endl;
    #endif
        send(errorMsgSign.set(valueSign ? "1" : "0")); // Send tripped value to gw
    
    }
    
    //********************************* END SendVeraSign() ***********************************************
    
    //********************************* SendVera220() ***********************************************
    
    // отсылаем данные на Vera о 220
    void SendVera220() {
    
    #if ConsoleComm
        Serial << "220: " << powerlostint << endl;
    #endif
        attachInterrupt(digitalPinToInterrupt(INTERRUPT_220V),detect_up, LOW); // включаем прерывание чтобы наловить фронты 220
        delay(2); // нужен, т.к. бывает не успевает собрать данные
        if (powerlostint > 0) powerlost = false; // если получили кучу прерываний, значит 220 есть
        else powerlost=true;	// если нет прерываний, нет и 220
        detachInterrupt(digitalPinToInterrupt(INTERRUPT_220V)); //временно выключаем прерывание
        send(errorMsg220.set(powerlost ? "1" : "0")); // Send tripped value to gw
        powerlostint=0; // обнуляем счётчик прерываний
    }
    
    //********************************* END SendVera220() ***********************************************
    
    //********************************** incomingMessage ************************************************
    
    void receive(const MyMessage &message) {
        // We only expect one type of message from controller. But we better check anyway.
        if (message.type == V_LIGHT) {
            // Change relay state
            if (message.sensor == CHILD_VERA_RELAY_SIGN) { // если пришло для сигнализации
                digitalWrite(RELAY_SIGN, message.getBool() ? RELAY_ON : RELAY_OFF);
                // Store state in eeprom
                // gw.saveState(message.sensor, message.getBool());
            }
            if (message.sensor == CHILD_VERA_ROLLING) { // если пришло для рольставень
                detachInterrupt(digitalPinToInterrupt(INTERRUPT_220V)); //временно выключаем прерывание
                if (message.getBool() == true) { // если пришла 1 то закрываем
                    for (int i = 0; i < 5; i++) {
                        closers();
                    }
                } else if (message.getBool() == false)
                    for (int i = 0; i < 5; i++) { // если пришёл 0 то открываем
                        for (int i = 0; i < 5; i++) {
                            openrs();
                        }
    
                    }
                //  attachInterrupt(digitalPinToInterrupt(INTERRUPT_220V), detect_up, LOW);  // настроить срабатывание прерывания interrupt1 на pin 2 на низкий уровень
            }
            // Write some debug info
    #if ConsoleComm
            Serial.print("Incoming change for sensor:");
            Serial.print(message.sensor);
            Serial.print(", New status: ");
            Serial.println(message.getBool());
    #endif
        }
    }
    
    //************************************* END incomingMessage ******************************************
    
    tekkaT Offline
    tekkaT Offline
    tekka
    Admin
    wrote on last edited by tekka
    #6

    @Daemon-D Hmm...where do you load the MySensors lib?

    #include <MySensors.h>
    

    (this statement is missing in your sketch)

    D sinczeS 2 Replies Last reply
    0
    • tekkaT tekka

      @Daemon-D Hmm...where do you load the MySensors lib?

      #include <MySensors.h>
      

      (this statement is missing in your sketch)

      D Offline
      D Offline
      Daemon D
      wrote on last edited by Daemon D
      #7

      @tekka

      Используем библиотеку MySensors версии 2.0.1-beta из папки: C:\Users\Daemon\Google Drive\Project\libraries\MySensors 
      

      Already I tried the beta of the development, all the same.

      1 Reply Last reply
      0
      • tekkaT tekka

        @Daemon-D Hmm...where do you load the MySensors lib?

        #include <MySensors.h>
        

        (this statement is missing in your sketch)

        sinczeS Offline
        sinczeS Offline
        sincze
        MySensors Evangelist
        wrote on last edited by
        #8

        @tekka interesting. I assume people are already using repeaters in 2.0.x so it will be safe for me to. Migrate from 1.5.4 to 2.0.0??

        D tekkaT 2 Replies Last reply
        0
        • sinczeS sincze

          @tekka interesting. I assume people are already using repeaters in 2.0.x so it will be safe for me to. Migrate from 1.5.4 to 2.0.0??

          D Offline
          D Offline
          Daemon D
          wrote on last edited by
          #9

          @sincze said:

          @tekka interesting. I assume people are already using repeaters in 2.0.x so it will be safe for me to. Migrate from 1.5.4 to 2.0.0??

          Yes, Migrate from 1.5.4 to 2.0.0

          sinczeS 1 Reply Last reply
          0
          • D Daemon D

            @sincze said:

            @tekka interesting. I assume people are already using repeaters in 2.0.x so it will be safe for me to. Migrate from 1.5.4 to 2.0.0??

            Yes, Migrate from 1.5.4 to 2.0.0

            sinczeS Offline
            sinczeS Offline
            sincze
            MySensors Evangelist
            wrote on last edited by
            #10

            @Daemon-D okay for you still not working right??

            D 1 Reply Last reply
            0
            • sinczeS sincze

              @Daemon-D okay for you still not working right??

              D Offline
              D Offline
              Daemon D
              wrote on last edited by Daemon D
              #11

              @sincze said:

              @Daemon-D okay for you still not working right??
              Repeater not working :(

              tekkaT 1 Reply Last reply
              0
              • D Daemon D

                @sincze said:

                @Daemon-D okay for you still not working right??
                Repeater not working :(

                tekkaT Offline
                tekkaT Offline
                tekka
                Admin
                wrote on last edited by
                #12

                @Daemon-D I'm not sure you got my question regarding the issue you have with your repeater node. I suggest you try the RepeaterNode sketch from the MySensors examples and post the debug log here.

                D 1 Reply Last reply
                0
                • sinczeS sincze

                  @tekka interesting. I assume people are already using repeaters in 2.0.x so it will be safe for me to. Migrate from 1.5.4 to 2.0.0??

                  tekkaT Offline
                  tekkaT Offline
                  tekka
                  Admin
                  wrote on last edited by
                  #13

                  @sincze said:

                  @tekka interesting. I assume people are already using repeaters in 2.0.x so it will be safe for me to. Migrate from 1.5.4 to 2.0.0??

                  Yes, should be safe to use.

                  1 Reply Last reply
                  0
                  • tekkaT tekka

                    @Daemon-D I'm not sure you got my question regarding the issue you have with your repeater node. I suggest you try the RepeaterNode sketch from the MySensors examples and post the debug log here.

                    D Offline
                    D Offline
                    Daemon D
                    wrote on last edited by Daemon D
                    #14

                    @tekka

                    @tekka said:

                    @Daemon-D I'm not sure you got my question regarding the issue you have with your repeater node. I suggest you try the RepeaterNode sketch from the MySensors examples and post the debug log here.

                    The problem was solved by a code transfer at the very beginning as a test sketch before #include

                    // Enable debug prints to serial monitor
                    #define MY_DEBUG 
                    
                    // Enable and select radio type attached
                    #define MY_RADIO_NRF24
                    //#define MY_RADIO_RFM69
                    
                    // Enabled repeater feature for this node
                    #define MY_REPEATER_FEATURE```
                    tekkaT 1 Reply Last reply
                    0
                    • D Daemon D

                      @tekka

                      @tekka said:

                      @Daemon-D I'm not sure you got my question regarding the issue you have with your repeater node. I suggest you try the RepeaterNode sketch from the MySensors examples and post the debug log here.

                      The problem was solved by a code transfer at the very beginning as a test sketch before #include

                      // Enable debug prints to serial monitor
                      #define MY_DEBUG 
                      
                      // Enable and select radio type attached
                      #define MY_RADIO_NRF24
                      //#define MY_RADIO_RFM69
                      
                      // Enabled repeater feature for this node
                      #define MY_REPEATER_FEATURE```
                      tekkaT Offline
                      tekkaT Offline
                      tekka
                      Admin
                      wrote on last edited by
                      #15

                      @Daemon-D Can you explain how you solved the issue - I'm sure other user could also profit if they face a similar problem. Thanks.

                      D 1 Reply Last reply
                      0
                      • tekkaT tekka

                        @Daemon-D Can you explain how you solved the issue - I'm sure other user could also profit if they face a similar problem. Thanks.

                        D Offline
                        D Offline
                        Daemon D
                        wrote on last edited by Daemon D
                        #16

                        @tekka said:

                        @Daemon-D Can you explain how you solved the issue - I'm sure other user could also profit if they face a similar problem. Thanks.

                        The problem was solved by moving to the top of the sketch exactly like the to test the sketch before #include

                        // Enable debug prints to serial monitor
                        #define MY_DEBUG 
                        
                        // Enable and select radio type attached
                        #define MY_RADIO_NRF24
                        //#define MY_RADIO_RFM69
                        
                        // Enabled repeater feature for this node
                        #define MY_REPEATER_FEATURE
                        
                        #include <SPI.h>
                        #include <MySensors.h>
                        
                        1 Reply Last reply
                        2
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        26

                        Online

                        11.7k

                        Users

                        11.2k

                        Topics

                        113.1k

                        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