Issue with temperature units
-
uint8_t MyMessage::getByte() const { if (miGetPayloadType() == P_BYTE) { return data[0]; } else if (miGetPayloadType() == P_STRING) { return atoi(data); } else { return 0; } }Payload type will be P_STRING when controller sends the data. Yes, why does it get size 2?!
-
Hmm.. we should probably not use atoi in case of String. Payload type should not matter in the getByte.
-
Yep, this is a bug.
I've also found that the newline character is included and transmitted on all outgoing messages from gateway! So payload length 2 was correct, and wrong ;)
How is it possible no one has seen this before (me included)?
-
Hmmm... how can one override this statement to be METRIC?
float temperature = static_cast<float>(static_cast<int>((gw.getConfig().isMetric?TemperatureSensors.getTempCByIndex(CHILD_ID_TEMPERATURE_FIRST+i):TemperatureSensors.getTempFByIndex(CHILD_ID_TEMPERATURE_FIRST+i)) * 10.)) / 10.; -
hello,
I must confess I have not read this thread completely. Too much for my bad english)
We try MySensors support for FHEM (www.fhem.de) to impementieren. I noticed that when the I_CONFIG message is answered correctly with 'M' for metric, then the sensor sends in Imperial. Is not surprising, everything is interpreted as a string from Gateway, but also byte checked. My solution proposal: In MySensors.cpp:
(isMetric = msg.getString()[0] == 'M' ; instead of isMetric = msg.getByte() == 'M' ;)} else if (type == I_CONFIG) { // Pick up configuration from controller (currently only metric/imperial) // and store it in eeprom if changed //isMetric = msg.getByte() == 'M' ; isMetric = msg.getString()[0] == 'M' ; if (cc.isMetric != isMetric) { cc.isMetric = isMetric; eeprom_write_byte((uint8_t*)EEPROM_CONTROLLER_CONFIG_ADDRESS, isMetric); //eeprom_write_block((const void*)&cc, (uint8_t*)EEPROM_CONTROLLER_CONFIG_ADDRESS, sizeof(ControllerConfig)); } } else if (type == I_CHILDREN) {Best regards,
Alexander
-
Thanks for the quick reply.
I've downloaded the source here: https://github.com/mysensors/CodeBender/blob/master/MySensor.cpp
Since it is still old.Now I see that https://github.com/mysensors/Arduino/blob/master/libraries/MySensors/MySensor.cpp would be better.
-
Oh.. you downloaded from codebender. That explains it.
Unfortunately it's still a bit too messy to update the public libraries over there (have to contact the codebender-people every time). Nowadays we keep a copy among in the MySensors-account which gets copied if you clone one of the examples.
Github always contains the latest.
-
My mistake. Was unfortunately cost few hours time for the search. For that I have won something overview in MySensors Code :)