Relay not reacting first 3 seconds



  • Hello all,

    I have the following sketch working with a pimatic installation. When i switch on the relay nothing happens
    when i keep switching it on and off than after 2 or 3 times it starts reacting. But every time i wait a couple of seconds
    i have to switch it on and off a couple of times before it reacts. This is th epimatic log output if i switch it on the first time.

    debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSF:MSG:LEN,2!=7
    19:53:48debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:MSG:READ,25-12-0,s=0,c=0,t=0,pt=0,l=0,sg=0:
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;MCO:BGN:INIT OK,TSP=1
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;MCO:BGN:STP
    19:45:45debug [pimatic-mysensors]: <- Presented Node  [ '0', '255', '0', '0', '18', '2.1.1' ]
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;MCO:REG:NOT NEEDED
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSM:READY:ID=0,PAR=0,DIS=0
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSM:INIT:GW MODE
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSM:INIT:TSP OK
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:WUR:MS=0
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSM:INIT
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;MCO:BGN:INIT GW,CP=RNNGA--,VER=2.1.1
    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSF:MSG:SEND,0-0-5-5,s=1,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=NACK:1
    19:45:44debug [pimatic-mysensors]: -> Sending  5;1;1;1;2;1
    

    if it starts reacting i get this output.

    debug [pimatic-mysensors]: <- MySensorDHT  { sender: 5, sensor: 1, type: 2, value: '1' }
    19:45:04debug [pimatic-mysensors]: <- MySensorSwitch  { sender: 5, sensor: 1, type: 2, value: '1' }
    19:45:04debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:MSG:ACK
    19:45:04debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:MSG:READ,5-5-0,s=1,c=1,t=2,pt=0,l=1,sg=0:1
    19:45:04debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSF:MSG:SEND,0-0-5-5,s=1,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=OK:1
    19:45:04debug [pimatic-mysensors]: -> Sending  5;1;1;1;2;1```
    
    
    This is the sketch i am using
    
    ```#define MY_NODE_ID 5
    // Enable debug prints
    #define MY_DEBUG
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    #include <SPI.h>
    #include <MySensors.h>  
    #include <DHT.h>  
    
    #define CHILD_ID_HUM 1
    #define CHILD_ID_TEMP 2
    #define HUMIDITY_SENSOR_DIGITAL_PIN 6
    unsigned long WAIT_TIME = 30000; // Sleep time between reads (in milliseconds)
    unsigned long lastRefreshTime = 0; // Use this to implement a non-blocking delay function
    
    #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 0  // GPIO value to write to turn on attached relay
    #define RELAY_OFF 1 // GPIO value to write to turn off attached relay
    
    
    
    DHT dht;
    float lastTemp;
    float lastHum;
    boolean metric = true; 
    MyMessage msgHum(CHILD_ID_HUM, V_HUM);
    MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
    
    
    void setup()  
    { 
      dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
    
      metric = getConfig().isMetric;
    
      for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
        // Then set relay pins in output mode
        pinMode(pin, OUTPUT);   
        // Set relay to last known state (using eeprom storage) 
        digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
      }
        // Request the latest relay status from the gateway 
      Serial.println("Requesting initial value from controller");
      request(RELAY_1, V_STATUS);
    }
    
    void presentation()  
    { 
      // Send the Sketch Version Information to the Gateway
      sendSketchInfo("Badkamer", "1.3");
    
      // Register all sensors to gw (they will be created as child devices)
      present(CHILD_ID_HUM, S_HUM);
      present(CHILD_ID_TEMP, S_TEMP);
    
      for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
        // Register all sensors to gw (they will be created as child devices)
        present(sensor, S_LIGHT);
      }
    }
    
    
    void loop()      
    { 
      boolean needRefresh = (millis() - lastRefreshTime) > WAIT_TIME;
      if (needRefresh)
      {
          lastRefreshTime = millis();
          
          float temperature = dht.getTemperature();
          if (isnan(temperature)) {
              Serial.println("Failed reading temperature from DHT");
          } else if (temperature != lastTemp) {
            lastTemp = temperature;
            if (!metric) {
              temperature = dht.toFahrenheit(temperature);
            }
            send(msgTemp.set(temperature, 1));
            Serial.print("T: ");
            Serial.println(temperature);
          }
          
          float humidity = dht.getHumidity();
          if (isnan(humidity)) {
              Serial.println("Failed reading humidity from DHT");
          } else if (humidity != lastHum) {
              lastHum = humidity;
              send(msgHum.set(humidity, 1));
              Serial.print("H: ");
              Serial.println(humidity);
          }
    
      }
      
    }
    
    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
         digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
         // Store state in eeprom
         Serial.print("Incoming change for sensor:");
         Serial.print(message.sensor);
         Serial.print(", New status: ");
         Serial.println(message.getBool());
       } 
    }
    


  • @derksuh Could you check, if your GW is rebooting all the time?
    The debug message

    19:45:45debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;MCO:BGN:INIT GW,CP=RNNGA--,VER=2.1.1
    

    looks like a reboot to me.
    Root cause could be a faulty AVR board definition (should be latest (1.6.18+) or <=1.6.11). Affected: Serial GWs and Ethernet-GW's.



  • @rejoe2 said in Relay not reacting first 3 seconds:

    AVR board definition

    If this is the problem then could i do something about it?



  • @derksuh For information which version of the board defs you use (and for up- and downgrading also): Within the Arduino IDE you can just use the boardmanager (Tools menue, as far as I remember) to do this...


Log in to reply
 

Suggested Topics

14
Online

11.4k
Users

11.1k
Topics

112.7k
Posts