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 message19: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...