how to read other device status with arduino?
-
Hey,
I'm using veraEdge with arduino gateway and I have a few temperature sensors on my network.
Ive search the forums and examples but could find a way to do what I want.Let say I have arduino1 has a DHT sensor and is a S_TEMP device #11 on my network
and arduino2 has LCD and is set to be S_HVAC device #12 on my networkI would like to show on arduino2 LCD the temperature read by arduino1.
Can u please help?
-
@leeoz there are two ways to achieve this
- The easy way:
Each time the temperature is changed in arduino1 and the controller is updated with a
message like this:
gw.send(msgTemp.set(((float)temperature / 10.0), 1));
Also send a message to arduino2 something like this:
arduino1 code:// This can be the sensor ID on arduino2 device #12 (but if you do not check each integer between 1-254 will do) #define MYSENSOR_TEMP_LCD 1 MyMessage msgTempNode2 (MYSENSOR_TEMP_LCD, V_TEMP); void loop () { gw.process(); ... do stuff if (oldtemperature != temperature) { // inform the gateway we have a new temp. gw.send(msgTemp.set(((float)temperature / 10.0), 1)); gw.wait(100); // give the gateway some time to process the 1ste message // inform our LCD slave node also about the temp. change msgTempNode2.setDestination(12); // This is the node ID on arduino2 gw.send(msgTempNode2.set(((float)temperature / 10.0), 1),; oldtemperature = temperature; } ... do some more stuff }
The LCD arduino should handle the incoming TEMP message, arduino2 code:
void incomingMessage(const MyMessage &message) { if (message.isAck()) { Serial.println(F("GW ack")); } switch (message.type) { case V_TEMP: Serial.print("New temperature received : "); Serial.println(message.getFloat()); ... do some stuff to update your LCD screen break; } }
2)The second more complex way is to request the temperature from arduino2 to arduino1
arduino1 code:// This can be the sensor ID on arduino2 device #12 (but if you do not check each integer between 1-254 will do) #define MYSENSOR_TEMP_LCD 1 MyMessage msgTempNode2 (MYSENSOR_TEMP_LCD, V_TEMP); void loop () { gw.process(); ... do stuff if (oldtemperature != temperature) { // inform the gateway we have a new temp. gw.send(msgTemp.set(((float)temperature / 10.0), 1)); // Store the temp. oldtemperature = temperature; } ... do more stuff } void incomingMessage(const MyMessage &message) { if (mGetCommand(message) == C_REQ) { MyMessage answerMsg; Serial.print("Incoming request for sensor: "); Serial.println(message.sensor); mSetCommand(answerMsg, C_SET); answerMsg.setSensor(message.sensor); answerMsg.setDestination(message.sender); switch (message.sensor) { case MYSENSOR_TEMP: answerMsg.setType(V_TEMP); gw.send(answerMsg.set((float)(oldtemperature/ 10.0), 1)); break; } } else { if (message.isAck()) { Serial.println(F("GW ack")); } switch (message.type) { ... handle other messages } } }
arduino2 code:
void loop () { gw.process(); ... do stuff if (time_to_poll_for_temp()) { // Request for temperature gw.request(MYSENSOR_TEMP, V_TEMP, 12); // This is the node ID on arduino2 } } void incomingMessage(const MyMessage &message) { if (message.isAck()) { Serial.println(F("GW ack")); } switch (message.type) { case V_TEMP: Serial.print("New temperature received : "); Serial.println(message.getFloat()); ... do some stuff to update your LCD screen break; } } ``
- The easy way:
-
@BartE
Tnx for the respose, great.
Also, if i would like to request value from vera?
So i use the gw.request(VeraDeviceID, V_TEMP,??)Also for solution 2, on the request from arduino2 code,
gw.request(MYSENSOR_TEMP, V_TEMP, 12);
MYSENSOR_TEMP is what?
And why did u type 12? The sensor id is 11...I think that in general i dont understad the use of gw.request()
-
@leeoz said:
@BartE
Tnx for the respose, great.
Also, if i would like to request value from vera?
So i use the gw.request(VeraDeviceID, V_TEMP,??)Requesting Vera is not possible, there is no request interface between the GW and Vera
Also for solution 2, on the request from arduino2 code,
gw.request(MYSENSOR_TEMP, V_TEMP, 12);
MYSENSOR_TEMP is what?
Just a sensor ID on your arduino1
And why did u type 12? The sensor id is 11...True, this should have been 11
I think that in general i dont understad the use of gw.request()
gw,request() sends a message to a different node requesting for data, the requested node has to process this message and respond with a second message. Look at this link at the "Requesting data" paragraph
-
@BartE
Ok, I think I got it all. Great tnx a lot