MySensor Node for latching Relays
-
Hello Guys,
i try to do some Controldevices for Homeautomation. My purpose is an self-sufficient system which is controlable from a mysensor.
So i use some Relays from Eltako - the ES12Z-200-UC Type.
Here is the Datasheet: http://www.eltako.com/fileadmin/downloads/en/_datasheets/Datasheet_ES12Z-200-UC.pdfThe big benefit is the standalone working and the simple controlability. So now i have done a MySensor Box and atached it on the control on and off connection and also a senseloop over the second switch contact to detect the State.
I adapt the Relay Sketch and include the Sensor in my FHEM Network. Now my Problem: When i detect a one, i send it to FHEM and FHEM reply it to me and so i switch again.. how can i interlock this?#include <MySensor.h> #include <SPI.h> #include <Bounce2.h> #define PIN_LEDRD 8 #define PIN_LEDGN 7 #define PIN_SWON 5 #define PIN_SWOFF 6 #define PIN_STATE 4 #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; MySensor gw; MyMessage msg(CHILD_ID, V_LIGHT); void setup() { gw.begin(incomingMessage, AUTO, true); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("Relay & Button", "1.0"); // Setup the button pinMode(PIN_STATE, INPUT); // Activate internal pull-up digitalWrite(PIN_STATE, HIGH); // After setting up the button, setup debouncer debouncer.attach(PIN_STATE); debouncer.interval(5); // Register all sensors to gw (they will be created as child devices) gw.present(CHILD_ID, S_LIGHT); // Make sure relays are off when starting up digitalWrite(PIN_SWON, 0); digitalWrite(PIN_SWOFF, 0); digitalWrite(PIN_LEDGN, 1); digitalWrite(PIN_LEDRD, 1); // Then set relay pins in output mode pinMode(PIN_SWOFF, OUTPUT); pinMode(PIN_SWON, OUTPUT); pinMode(PIN_LEDGN, OUTPUT); pinMode(PIN_LEDRD, OUTPUT); // Set relay to last known state (using eeprom storage) state = gw.loadState(CHILD_ID); //digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF); } /* Example on how to asynchronously check for new messages from gw */ void loop() { gw.process(); debouncer.update(); // Get the update value int value = debouncer.read(); if (value != oldValue ) { Serial.print("Incoming change for value:"); Serial.println(value); if (value == 1) { digitalWrite(PIN_LEDRD, 0); digitalWrite(PIN_LEDGN, 1); } else { digitalWrite(PIN_LEDRD, 1); digitalWrite(PIN_LEDGN, 0); } // gw.send(msg.set(value), true); // Send new state and request ack back } oldValue = value; } void incomingMessage(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) { // Change relay state state = message.getBool(); if (state == 1) { digitalWrite(PIN_SWON, 1); //digitalWrite(PIN_LEDRD, 1); delay(100); digitalWrite(PIN_SWON, 0); // digitalWrite(PIN_LEDGN, 0); } else { digitalWrite(PIN_SWOFF, 1); delay(100); digitalWrite(PIN_SWOFF, 0); // digitalWrite(PIN_LEDRD, 0); // digitalWrite(PIN_LEDGN, 1); } // Store state in eeprom gw.saveState(CHILD_ID, state); // Write some debug info Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); } }Can you help me a little bit? :)
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