Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Controllers
  3. Vera
  4. Issue with temperature units

Issue with temperature units

Scheduled Pinned Locked Moved Vera
23 Posts 9 Posters 9.9k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • jocke4uJ Offline
    jocke4uJ Offline
    jocke4u
    wrote on last edited by
    #7

    I have the same problem with DallasSensor

    Startup says:

    sensor started, id 2
    send: 2-2-0-0 s=255,c=0,t=17,pt=0,l=3,st=ok:1.4
    send: 2-2-0-0 s=255,c=3,t=6,pt=1,l=1,st=ok:0
    read: 0-0-2 s=255,c=3,t=6,pt=0,l=2:M                          <<<==== Metric <<<
    send: 2-2-0-0 s=255,c=3,t=11,pt=0,l=17,st=ok:Light+Temp Sensor
    send: 2-2-0-0 s=255,c=3,t=12,pt=0,l=3,st=ok:1.0
    send: 2-2-0-0 s=0,c=0,t=16,pt=0,l=3,st=ok:1.4
    

    And I trace:

    Serial.println(gw.getConfig().isMetric);
    

    which output 0, not 1

    Switching to Imperial I get:

    sensor started, id 2
    send: 2-2-0-0 s=255,c=0,t=17,pt=0,l=3,st=ok:1.4
    send: 2-2-0-0 s=255,c=3,t=6,pt=1,l=1,st=ok:0
    read: 0-0-2 s=255,c=3,t=6,pt=0,l=2:I                          <<<==== Imperial <<<
    send: 2-2-0-0 s=255,c=3,t=11,pt=0,l=17,st=ok:Light+Temp Sensor
    

    and the trace says 0 as expected.

    Then I tried to trace in MySensors.cpp and added (not workin though ;) ):

    } 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' ;
        debug(PSTR("isMetric=%s\n"), isMetric);
        debug(PSTR("cc.isMetric=%s\n"), cc.isMetric);
        if (cc.isMetric != isMetric) {
    

    But then it started to work :D

    Removed the lines above and the problem is back....so something there...
    Don't have time right now to test....

    1 Reply Last reply
    0
    • hekH Offline
      hekH Offline
      hek
      Admin
      wrote on last edited by
      #8

      @jocke4u

      Are you saying adding debug prints makes it work?

      jocke4uJ 1 Reply Last reply
      0
      • hekH hek

        @jocke4u

        Are you saying adding debug prints makes it work?

        jocke4uJ Offline
        jocke4uJ Offline
        jocke4u
        wrote on last edited by
        #9

        @hek

        Yes for some strange reason :)
        However I used %s and not %d in the debug but have now used %d as below

        } 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' ;
            debug(PSTR("isMetric=%d\n"), isMetric);
            debug(PSTR("cc.isMetric=%d\n"), cc.isMetric);
            if (cc.isMetric != isMetric) {
                cc.isMetric = isMetric;
                debug(PSTR("Updating EEPROM\n"));	
                debug(PSTR("isMetric=%d\n"), isMetric);	
                debug(PSTR("cc.isMetric=%d\n"), cc.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));
            }
        

        Gives the output

        sensor started, id 2
        send: 2-2-0-0 s=255,c=0,t=17,pt=0,l=3,st=ok:1.4
        send: 2-2-0-0 s=255,c=3,t=6,pt=1,l=1,st=ok:0
        read: 0-0-2 s=255,c=3,t=6,pt=0,l=2:M
        isMetric=0
        cc.isMetric=1
        Updating EEPROM
        isMetric=0
        cc.isMetric=0
        

        So it seems that "metric" flag is not unpacked correctly, or?

        1 Reply Last reply
        0
        • YveauxY Offline
          YveauxY Offline
          Yveaux
          Mod
          wrote on last edited by
          #10

          @jocke4u said:

          l=2:M

          I find it strange that length is reported as 2 while only a single character seems to be sent. The protocol version 1.4 is correctly reported as length 3.

          http://yveaux.blogspot.nl

          hekH 1 Reply Last reply
          0
          • YveauxY Yveaux

            @jocke4u said:

            l=2:M

            I find it strange that length is reported as 2 while only a single character seems to be sent. The protocol version 1.4 is correctly reported as length 3.

            hekH Offline
            hekH Offline
            hek
            Admin
            wrote on last edited by
            #11

            @Yveaux

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

            hekH 1 Reply Last reply
            0
            • hekH hek

              @Yveaux

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

              hekH Offline
              hekH Offline
              hek
              Admin
              wrote on last edited by hek
              #12

              Hmm.. we should probably not use atoi in case of String. Payload type should not matter in the getByte.

              hekH 1 Reply Last reply
              0
              • hekH hek

                Hmm.. we should probably not use atoi in case of String. Payload type should not matter in the getByte.

                hekH Offline
                hekH Offline
                hek
                Admin
                wrote on last edited by hek
                #13

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

                YveauxY 1 Reply Last reply
                0
                • jocke4uJ Offline
                  jocke4uJ Offline
                  jocke4u
                  wrote on last edited by
                  #14

                  Sounds good anyway....one bug less :)
                  I just setup a sensor with DHT22/AM2302 and get the same results here.

                  1 Reply Last reply
                  0
                  • hekH Offline
                    hekH Offline
                    hek
                    Admin
                    wrote on last edited by
                    #15

                    Fix checked in. I'm creating a more comprehensive release note in the 1.4 thread.

                    1 Reply Last reply
                    0
                    • hekH hek

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

                      YveauxY Offline
                      YveauxY Offline
                      Yveaux
                      Mod
                      wrote on last edited by
                      #16

                      @hek said:

                      How is it possible no one has seen this before (me included)?

                      At least I saw it ;-)
                      I personally tend to read over all the details in the serial api... This time I noticed.

                      Be glad you nailed it!

                      http://yveaux.blogspot.nl

                      1 Reply Last reply
                      0
                      • jocke4uJ Offline
                        jocke4uJ Offline
                        jocke4u
                        wrote on last edited by
                        #17

                        Thanks @hek and @Yveaux I can confirm it's working on both Dallas sensor and DHT22.
                        Great support!!

                        1 Reply Last reply
                        0
                        • NuubiN Offline
                          NuubiN Offline
                          Nuubi
                          wrote on last edited by
                          #18

                          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.;

                          1 Reply Last reply
                          0
                          • H Offline
                            H Offline
                            hexenmeister
                            wrote on last edited by
                            #19

                            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

                            1 Reply Last reply
                            0
                            • hekH Offline
                              hekH Offline
                              hek
                              Admin
                              wrote on last edited by
                              #20

                              Welcome @hexenmeister!

                              What version of MySensors library did you download? The current version in gihub/master already has getString()[0].

                              1 Reply Last reply
                              0
                              • H Offline
                                H Offline
                                hexenmeister
                                wrote on last edited by
                                #21

                                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.

                                1 Reply Last reply
                                0
                                • hekH Offline
                                  hekH Offline
                                  hek
                                  Admin
                                  wrote on last edited by
                                  #22

                                  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.

                                  1 Reply Last reply
                                  0
                                  • H Offline
                                    H Offline
                                    hexenmeister
                                    wrote on last edited by
                                    #23

                                    My mistake. Was unfortunately cost few hours time for the search. For that I have won something overview in MySensors Code :)

                                    1 Reply Last reply
                                    0
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    15

                                    Online

                                    11.7k

                                    Users

                                    11.2k

                                    Topics

                                    113.0k

                                    Posts


                                    Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • MySensors
                                    • OpenHardware.io
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular