"Error sending switch command, check device/hardware !"
-
hello .
I have problem with switch command.i am using this sketch:/** * 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. * ******************************* * * REVISION HISTORY * Version 1.0 - Henrik Ekblad * * DESCRIPTION * Example sketch for a "light switch" where you can control light or something * else from both HA controller and a local physical button * (connected between digital pin 3 and GND). * This node also works as a repeader for other nodes * http://www.mysensors.org/build/relay */ // 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> #include <Bounce2.h> #define RELAY_PIN1 6 // Arduino Digital I/O pin number for relay #define BUTTON_PIN1 3 // Arduino Digital I/O pin number for button #define CHILD_ID1 1 // Id of the sensor child #define RELAY_PIN2 7 // Arduino Digital I/O pin number for relay #define BUTTON_PIN2 4 // Arduino Digital I/O pin number for button #define CHILD_ID2 2 // Id of the sensor child #define RELAY_PIN3 8 // Arduino Digital I/O pin number for relay #define BUTTON_PIN3 5 // Arduino Digital I/O pin number for button #define CHILD_ID3 3 // Id of the sensor child #define RELAY_ON 1 #define RELAY_OFF 0 Bounce debouncer1 = Bounce(); int oldValue1 = 0; bool state1; Bounce debouncer2 = Bounce(); int oldValue2 = 0; bool state2; Bounce debouncer3 = Bounce(); int oldValue3 = 0; bool state3; MyMessage msg1(CHILD_ID1, V_LIGHT); MyMessage msg2(CHILD_ID2, V_LIGHT); MyMessage msg3(CHILD_ID3, V_LIGHT); void setup() { // Setup the button pinMode(BUTTON_PIN1, INPUT); digitalWrite(BUTTON_PIN1, HIGH); pinMode(BUTTON_PIN2, INPUT); digitalWrite(BUTTON_PIN2, HIGH); pinMode(BUTTON_PIN3, INPUT); digitalWrite(BUTTON_PIN3, HIGH); // After setting up the button, setup debouncer debouncer1.attach(BUTTON_PIN1); debouncer1.interval(5); debouncer2.attach(BUTTON_PIN2); debouncer2.interval(5); debouncer3.attach(BUTTON_PIN3); debouncer3.interval(5); // Make sure relays are off when starting up digitalWrite(RELAY_PIN1, RELAY_OFF); pinMode(RELAY_PIN1, OUTPUT); digitalWrite(RELAY_PIN2, RELAY_OFF); pinMode(RELAY_PIN2, OUTPUT); digitalWrite(RELAY_PIN3, RELAY_OFF); pinMode(RELAY_PIN3, OUTPUT); // Set relay to last known state (using eeprom storage) state1 = loadState(CHILD_ID1); digitalWrite(RELAY_PIN1, state1 ? RELAY_ON : RELAY_OFF); state2 = loadState(CHILD_ID2); digitalWrite(RELAY_PIN2, state2 ? RELAY_ON : RELAY_OFF); state3 = loadState(CHILD_ID3); digitalWrite(RELAY_PIN3, state3 ? RELAY_ON : RELAY_OFF); } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Relay & Button", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID1, S_LIGHT); present(CHILD_ID2, S_LIGHT); present(CHILD_ID3, S_LIGHT); } /* * Example on how to asynchronously check for new messages from gw */ void loop() { { debouncer1.update(); // Get the update value int value1 = debouncer1.read(); if (value1 != oldValue1 && value1 == 0) { send(msg1.set(state1 ? false : true), true); // Send new state and request ack back } oldValue1 = value1; } { debouncer2.update(); // Get the update value int value2 = debouncer2.read(); if (value2 != oldValue2 && value2 == 0) { send(msg2.set(state2 ? false : true), true); // Send new state and request ack back } oldValue2 = value2; } { debouncer3.update(); // Get the update value int value3 = debouncer3.read(); if (value3 != oldValue3 && value3 == 0) { send(msg3.set(state3 ? false : true), true); // Send new state and request ack back } oldValue3 = value3; } } void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.isAck()) { Serial.println("This is an ack from gateway"); } if (message.type == V_LIGHT) { switch (message.sensor) { case 1: state1 = message.getBool(); digitalWrite(message.sensor + 2, state1 ? RELAY_ON : RELAY_OFF); break; case 2: state2 = message.getBool(); digitalWrite(message.sensor + 2, state2 ? RELAY_ON : RELAY_OFF); break; case 3: state3 = message.getBool(); digitalWrite(message.sensor + 2, state3 ? RELAY_ON : RELAY_OFF); break; } // Write some debug info Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); } }
this is a 3 channel relay with button.
some time commands sent and some time could not be sent and show "Error sending switch command, check device/hardware !" I did take steps in accordance site and use a 4.7uf capacitor between vcc and gnd in radio . now some time command sent . some time could not be sent and i wait for a time (1 min , 2 min and more) and again send command and this is ok ! also when for test i sent some consecutive command (on/off/on/off/on) so again i see "Error sending switch command, check device/hardware !" i wait again and after a while work again and ok !
I did search between topics and i see some suggest to use this module:
link text
so i use this but the problem did not solve for me .
also i use a repeater between node and gateway but...
Does anyone a proposal for my problem ?Best Regards S_m .
-
@Reza just stop creating new accounts please.
-
@Anticimex
when some people is living in a building so this is not all account are one person ! sama is my friend . i introduce mysensors to her . so he had problem and question about this with me and i told to her i dont know go and register a account or use my account ! i have just 2 account one account is this and another account is for when i lost my user pass (this ) after found i comeback to this account ....
-
@Reza
looks funky but maybe..This is a problem you have already asked for..
So the best you can do is:
- remove your relays and connect leds instead
- test this for few days.
If there is no issues, it means that's on your hardware. And we can't scope it at distance. Can be a bad power supply input on your hardware (no filtering), parasites due to relay switch (better to use relay driver, tvs diode, capa for filtering) etc..
I suggest you to read some docs on internet about this. That's the diy side, when using simple chinese relays modules.
-
@sama, I had similar problems, always with relay nodes. The solution that has worked 100% of the time for me is to add a delay(100) as described by @kk02067 at the end of the forum thread of the same name:
https://forum.mysensors.org/topic/4987/error-sending-switch-command-check-device-hardware
Don't know if this will solve your problem, but worth a try.