Push V_VAR from Vera controller to sensor?



  • Hi,

    I've just started with MySensors, and am trying to get my first sketch working.
    I have an LCD display that I want to update from my Vera by setting V_VAR1 to V_VAR4.

    This is my sketch:

    #define SN "LCD Display"
    #define SV "1.0"
    #define NODE_ID 10
    
    #include <MySensor.h> 
    #include <SPI.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    
    MySensor gw;
    
    static int backlight = 0;
    MyMessage backlightMsg(0, V_LIGHT);
    MyMessage var1text(0, V_VAR1);
    MyMessage var2text(0, V_VAR2);
    MyMessage var3text(0, V_VAR3);
    MyMessage var4text(0, V_VAR4);
    
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
    //LiquidCrystal_I2C lcd(0x27); //set the LCD address to 0x27 for a 16 chars and 2 line display
    
    void setup()
    {
      Serial.begin(9600);  // Used to type in characters
      lcd.begin(20,4);
    
      // ------- Quick 3 blinks of backlight  -------------
      for(int i = 0; i< 3; i++)
      {
        lcd.backlight();
        delay(250);
        lcd.noBacklight();
        delay(250);
      }
      lcd.backlight(); // finish with backlight on  
    
      lcd.setCursor(0,0); //Start at character 4 on line 0
      lcd.print("   MySensors LCD    ");
      delay(1000);
      lcd.setCursor(0,2);
      lcd.print("Waiting for gateway");
      
      Serial.println( SN ); 
      gw.begin( incomingMessage, NODE_ID );
      gw.present( 0, S_LIGHT );
      gw.sendSketchInfo(SN, SV);
      // Pull the gateway's light status
      gw.request( 0, V_STATUS );
      gw.request( 0, V_VAR1 );
      gw.request( 0, V_VAR2 );
      gw.request( 0, V_VAR3 );
      gw.request( 0, V_VAR4 );
      
    
    }/*--(end setup )---*/
    
    
    void loop()
    {
      gw.process();
    }
    
    void incomingMessage(const MyMessage &message) {
      if (message.type == V_STATUS) {
        
        //  Retrieve on/off from the incoming request message
        int backlight = atoi( message.data );
    
        if (backlight){
          lcd.backlight();
        }
        else {
          lcd.noBacklight();
        }
    
        }
      if (message.type == V_VAR1) {
        String lcdtext = String(message.data);
        updateLCDRow(0, lcdtext);
      }
    
      if (message.type == V_VAR2) {
        String lcdtext = String(message.data);
        updateLCDRow(1, lcdtext);
      }
    
      if (message.type == V_VAR3) {
        String lcdtext = String(message.data);
        updateLCDRow(2, lcdtext);
      }
    
      if (message.type == V_VAR4) {
        String lcdtext = String(message.data);
        updateLCDRow(3, lcdtext);
      }
    }
    
    void updateLCDRow(int row, String text) {
      lcd.setCursor(0,row);
      lcd.print("                    ");
      lcd.setCursor(0,row);
      lcd.print(text);
    }
    
    

    The problem is that changing the variables in Vera doesn't update the LCD (only once during setup). Do I have to do a gw.request() in the loop in order to get the data? That seems a bit inefficient...
    Is it possible to push the data?


  • Admin

    You can push data using a scene or via lua...

    
    
    luup.call_action("urn:upnp-arduino-cc:serviceId:arduino1", "SendCommand", {radioId="1;2", variableId="VAR_1", value="Hello"}, 372)
    

    1 - node id
    2 - sensor id
    372 is your arduino device id


Log in to reply
 

Suggested Topics

  • 3
  • 1
  • 2
  • 2
  • 1
  • 24

0
Online

11.2k
Users

11.1k
Topics

112.5k
Posts