Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
R

rspecht

@rspecht
About
Posts
1
Topics
1
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • MySensor Node for latching Relays
    R rspecht

    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.pdf

    The 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? :)

    Hardware
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular