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?
-
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