set Metric on gw?
-
Sorry, I am brand new to MySensors. I see in all the examples there is a gw.getConfig().isMetric
I know this is a new feature. Trying to figure out how to set this, before I update all my nodes with the metric part just commented out.
Can I push this setting out from openhab (via SerialGateway)?
TIA. -
Guess I should have posted this code initially. I already have that rule in place, and still no luck. (I couldnt get "gw.requestTime(receiveTime)" to work either)
This is in the setup portion in arduino sketch
metric = gw.getConfig().isMetric;Only posted relevant portions of the code. The rule itself works (for V_TEMP, etc), just none of the "internal commands I_*" do.
var int I_CONFIG = 6 //receiving msg from mysensors gateway rule "Arduino sends to Openhab" when Item Arduino received update then var String lineBuffer = Arduino.state.toString.split("\n") for (String line : lineBuffer) { var String[] message = line.split(";") var Integer nodeId = new Integer(message.get(0)) var Integer childId = new Integer(message.get(1)) var Integer msgType = new Integer(message.get(2)) var Integer ack = new Integer(message.get(3)) var Integer subType = new Integer(message.get(4)) var String msg = message.get(5) // Internal Command if(msgType == 3){ if(subType == I_CONFIG){ var String unit unit = "I" //unit = "M" sendCommand(Arduino, nodeId + ";255;3;0;6;" + unit + "\n") println("Updated Sensor Units to " + unit +) } } } endThis is what openhab is getting when the arduino is reset.
101;255;3;0;11;Humidity 0;0;3;0;9;read: 101-101-0 s=255,c=3,t=12,pt=0,l=3:1.0 101;255;3;0;12;1.0 0;0;3;0;9;read: 101-101-0 s=0,c=0,t=7,pt=0,l=5:1.4.1 101;0;0;0;7;1.4.1 0;0;3;0;9;read: 101-101-0 s=1,c=0,t=6,pt=0,l=5:1.4.1 101;1;0;0;6;1.4.1 0;0;3;0;9;read: 101-101-0 s=2,c=0,t=4,pt=0,l=5:1.4.1 101;2;0;0;4;1.4.1 0;0;3;0;9;read: 101-101-0 s=3,c=2,t=3,pt=0,l=0: 101;3;2;0;3; 0;0;3;0;9;read: 101-101-0 s=1,c=1,t=0,pt=7,l=5:26.0 101;1;1;0;0;26.0 0;0;3;0;9;read: 101-101-0 s=0,c=1,t=1,pt=7,l=5:34.0 101;0;1;0;1;34.0Shouldnt there be something like
101;255;3;0;6;? -
Ok, it just started working !!!! I created a separate rul for it. So either it doesnt like being mixed in with the other stuff or it doesnt like the == I_CONFIG
This rule below is working
rule "Arduino config" when Item Arduino received update then var String lineBuffer = Arduino.state.toString.split("\n") for (String line : lineBuffer) { var String[] message = line.split(";") var Integer nodeId = new Integer(message.get(0)) var Integer childId = new Integer(message.get(1)) var Integer msgType = new Integer(message.get(2)) var Integer ack = new Integer(message.get(3)) var Integer subType = new Integer(message.get(4)) var String msg = message.get(5) // Internal Command if(msgType == 3){ if(subType == 6){ var String unit unit = "I" //unit = "M" sendCommand(Arduino, nodeId + ";255;3;0;6;" + unit + "\n") println("Updated Sensor Units to " + unit +) } } } end -
Glad you got yours working. I tried changing the code on mine to see if it would respond, but it didn't. I may have hard coded the sensors to imperial though. I believe mine is catching the I_CONFIG variable, because I would get an output on the console when the sensor started up where I had a println command. Hopefully it was just my syntax that was wrong.
On another note, can you trigger a "sendCommand" with xxx;255;3;0;6;<I or M> at any time, or can it only be in response to the request from the sensor node?
-
Glad you got yours working. I tried changing the code on mine to see if it would respond, but it didn't. I may have hard coded the sensors to imperial though. I believe mine is catching the I_CONFIG variable, because I would get an output on the console when the sensor started up where I had a println command. Hopefully it was just my syntax that was wrong.
On another note, can you trigger a "sendCommand" with xxx;255;3;0;6;<I or M> at any time, or can it only be in response to the request from the sensor node?
@Tango2 I had been doing this a different way until I noticed the GW should be able to do it. BTW, It is only working on one node, not sure why :(.
Anyway, my alternate solution allows be to send "settings: to the nodes. For example, change the loop time or measurement unit.
This is not the complete code, just the relevant parts (hopefully).
void setup() { gw.begin(incomingMessage, nodeID); } void loop() { gw.process(); } void incomingMessage(const MyMessage &message) { if (message.type == 97) { Serial.print("Recvd Time"); Serial.println(time); timeReceived=true; } if (message.type == 98) { int reqsleep = atoi( message.data ); SLEEP_TIME = reqsleep*1000; Serial.print( "Changing sleep to: " ); Serial.println( String(reqsleep) ); } if (message.type == 99) { int requnit = atoi( message.data ); Serial.print( "Changing units to: " ); if(requnit == M){ metric = true; Serial.println( "metric" ); } else { metric = false; Serial.println( "imprerial" ); } } }Using this code, I can send things from openhab, or any serial command I suppose.
My openhab rules
Send Units:sendCommand(Arduino, "101;99;1;0;99;M\n")Send Time:
var Number time1 time1 = now().getMillis() / 1000 sendCommand(Arduino, "101;97;1;0;97;" + time1 + "\n")
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login