Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. hhg
    3. Best
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Best posts made by hhg

    • RE: SceneController

      In 1.4b1 1.4b1 (18848a2) Scene Controller support is present, and works fine

      Present with:

      gw.present(CHILD_ID, S_SCENE_CONTROLLER); 
      

      And it shows as a generic scene controller in Vera:
      upload-af0688b3-9110-434f-a57c-aa34e808e0fe

      The sketch to support a 4 button wall controller:

      // Simple SceneController 
      
      #include <MySensor.h>
      #include <SPI.h>
      #include <Bounce2.h>
      
      #define CHILD_ID 3
      // PIN for the buttons
      byte buttons[] = {3, 4, 5, 6};
      #define NUMBUTTONS sizeof(buttons)
      byte pressed[NUMBUTTONS], justpressed[NUMBUTTONS], justreleased[NUMBUTTONS];
      
      MySensor gw;
      Bounce debouncer[NUMBUTTONS];
      
      int oldValue[NUMBUTTONS];
      
      MyMessage msgOn(CHILD_ID,V_SCENE_ON);
      MyMessage msgOff(CHILD_ID,V_SCENE_OFF);
      
      void setup()  
      {  
        gw.begin();
      
        /// Make input & enable pull-up resistors on switch pins
        for (short i=0; i < NUMBUTTONS; i++){
        
          pinMode(buttons[i], INPUT);
          digitalWrite(buttons[i], HIGH);
          oldValue[i] = -1;
          // After setting up the button, setup debouncer
          debouncer[i].attach(buttons[i]);
          debouncer[i].interval(5);
          
        }
        
        
        
        // Send the Sketch Version Information to the Gateway
        gw.sendSketchInfo("LK 4-Tryk", "1.0");
        // Register binary input sensor to gw (they will be created as child devices)
        gw.present(CHILD_ID, S_SCENE_CONTROLLER); 
      }
      
      
      //  Check if digital input has changed and send in new value
      void loop() 
      {
        for (short i=0; i < NUMBUTTONS; i++){
          debouncer[i].update();
          // Get the update value
          int value = debouncer[i].read();
       
          if (value != oldValue[i]) {
             // Send in the new value
             if (value==HIGH) {
               gw.send(msgOff.set(i));
             }
             else {
               gw.send(msgOn.set(i));
             }
             oldValue[i] = value;
          }
        }
      }
      posted in Development
      hhg
      hhg
    • RE: SceneController

      @androbot said:

      I'm suspecting this is due to the "setVariableIfChanged" nature of the code in conjunction with the split V_SCENE_ON/V_SCENE_OFF messages. In other words, it's not a single variable that is toggling, it's two separate ones.

      Nice spottet!

      Change line 182 in L_Arduino.lua from

       if ((value ~= curValue) or (curValue == nil)) then
      

      to:

      if ((value ~= curValue) or (curValue == nil) or (serviceId == "urn:micasaverde-com:serviceId:SceneController1")) then
      

      So the sl_SceneActivated/sl_SceneDeactivated variables are updated unconditionally

      posted in Development
      hhg
      hhg