Most reliable light switch
-
I'm moving to Vera+MySensors and will do all light management under MySensors.
Months before I raised a discussion to allow node to be operated individually, even if it's not connected to MySensor network. Unfortunately, it will not happen - once node is not connected - it will stop working.I definitely don't want to put my house in the dark because something went wrong. Does anybody created a reliable switch, based (maybe) on MySensor node + (say) Arduino ? Can anybody share good experience?
-
I am working on such a node, but am still in the programming and testing stage. I will come back here when I have positive results!
@DavidZH, sounds promising. Give me something for tests, I will spend next few months on this.
-
@DavidZH, sounds promising. Give me something for tests, I will spend next few months on this.
The information in these posts may be of use.
mys-library-startup-control-after-onregistration
In mySensors V2.1 the basic sketch for a switch that will work even if the controller/gateway is down would look something like this
// Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 #define MY_TRANSPORT_WAIT_READY_MS 3000 //set how long to wait for transport ready. #include <SPI.h> #include <MySensors.h> #include <Bounce2.h> #define RELAY_PIN 4 // Arduino Digital I/O pin number for relay #define BUTTON_PIN 3 // Arduino Digital I/O pin number for button #define CHILD_ID 1 // Id of the sensor child #define RELAY_ON 1 #define RELAY_OFF 0 Bounce debouncer = Bounce(); int oldValue = 0; bool state; MyMessage msg(CHILD_ID, V_STATUS); void setup() { pinMode(BUTTON_PIN, INPUT); // Setup the button pin digitalWrite(BUTTON_PIN, HIGH); // Activate internal pull-up // After setting up the button, setup debouncer debouncer.attach(BUTTON_PIN); debouncer.interval(5); pinMode(RELAY_PIN, OUTPUT); // set relay pin in output mode digitalWrite(RELAY_PIN, RELAY_OFF); // Make sure relay is off when starting up } 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_ID, S_BINARY); } void loop() { debouncer.update(); // Get the update value int value = debouncer.read(); if (value != oldValue && value == 0) { // check for new button push state = !state; //Toggle the state send(msg.set(state), false); // send new state to controller, no ack requested digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch the relay to the new state } oldValue = value; } void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.type == V_STATUS) { state = message.getBool(); // get the current state digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch relay to current state // Write some debug info Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); } }
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login