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. Development
  3. NodeManager
  4. NodeManager: plugin for a rapid development of battery-powered sensors

NodeManager: plugin for a rapid development of battery-powered sensors

Scheduled Pinned Locked Moved NodeManager
223 Posts 23 Posters 72.9k Views 26 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.
  • R Offline
    R Offline
    Robbie_
    wrote on last edited by Robbie_
    #33

    Hi User2684,

    As promised i took NodeManager for a spin. It functions well but i have an issue with powering a DHT22 from the digital pins. It just does not show any temp/hum. If i use the power from the battery it functions well.

    Any clue what this could be?

    I used setPowerPins6,7,10000 to be sure the DHT22 has enough time to start up. If i use my multimeter between pins 6,7 i see the voltage going to 3.something volts and to 0 when the 10000 miliseconds are gone.

    My config is as following;

    // before
    void before() {
      // setup the serial port baud rate
      Serial.begin(MY_BAUD_RATE);  
      /*
       * Register below your sensors
      */
      nodeManager.setSleep(SLEEP,1,MINUTES); 
    nodeManager.registerSensor(SENSOR_DHT22,3);
    nodeManager.setPowerPins(6,7,10000);
      /*
       * Register above your sensors
      */
      nodeManager.before();
    }
    B 1 Reply Last reply
    0
    • R Robbie_

      Hi User2684,

      As promised i took NodeManager for a spin. It functions well but i have an issue with powering a DHT22 from the digital pins. It just does not show any temp/hum. If i use the power from the battery it functions well.

      Any clue what this could be?

      I used setPowerPins6,7,10000 to be sure the DHT22 has enough time to start up. If i use my multimeter between pins 6,7 i see the voltage going to 3.something volts and to 0 when the 10000 miliseconds are gone.

      My config is as following;

      // before
      void before() {
        // setup the serial port baud rate
        Serial.begin(MY_BAUD_RATE);  
        /*
         * Register below your sensors
        */
        nodeManager.setSleep(SLEEP,1,MINUTES); 
      nodeManager.registerSensor(SENSOR_DHT22,3);
      nodeManager.setPowerPins(6,7,10000);
        /*
         * Register above your sensors
        */
        nodeManager.before();
      }
      B Offline
      B Offline
      bilbolodz
      wrote on last edited by
      #34

      @Robbie_ I've NOT checked anything but I think that probably better:

      1. power up DHT
      2. wait a little to "dht startup"
      3. register sensor
      R 1 Reply Last reply
      0
      • B bilbolodz

        @Robbie_ I've NOT checked anything but I think that probably better:

        1. power up DHT
        2. wait a little to "dht startup"
        3. register sensor
        R Offline
        R Offline
        Robbie_
        wrote on last edited by
        #35

        @bilbolodz
        So like this?

        nodeManager.setPowerPins(6,7,10000);
        nodeManager.registerSensor(SENSOR_DHT22,3);
        nodeManager.setSleep(SLEEP,1,MINUTES);

        B 1 Reply Last reply
        0
        • R Robbie_

          @bilbolodz
          So like this?

          nodeManager.setPowerPins(6,7,10000);
          nodeManager.registerSensor(SENSOR_DHT22,3);
          nodeManager.setSleep(SLEEP,1,MINUTES);

          B Offline
          B Offline
          bilbolodz
          wrote on last edited by
          #36

          @Robbie_ said in NodeManager: plugin for a rapid development of battery-powered sensors:
          Try this:

          nodeManager.setPowerPins(6,7,10000);
          wait(10000);
          nodeManager.registerSensor(SENSOR_DHT22,3);```
          1 Reply Last reply
          0
          • R Offline
            R Offline
            Robbie_
            wrote on last edited by Robbie_
            #37

            @bilbolodz said in NodeManager: plugin for a rapid development of battery-powered sensors:

            wait(10000);

            Thanks for the fast reply! Still the same issue;

            SEND D=0 I=200 C=0 T=48 S=STARTED I=0 F=0.00
            14258 TSF:MSG:SEND,100-100-0-0,s=200,c=1,t=48,pt=0,l=7,sg=0,ft=0,st=OK:STARTED
            14395 MCO:BGN:INIT OK,TSP=1
            ON P=7
            14426 MCO:SLP:MS=10000,SMS=0,I1=255,M1=255,I2=255,M2=255
            14493 MCO:SLP:TPD
            14512 MCO:SLP:WUP=-1
            DHT I=1 T=nan
            OFF P=7
            SLEEP 60s
            SEND D=0 I=200 C=1 T=48 S=SLEEPING I=0 F=0.00
            
            U 1 Reply Last reply
            0
            • B bilbolodz

              @user2684 Great plugin, thanks. Please: consider adding support for a more than one DS18B20 devices and fixed mapping sensor_id <-> DS18B20 id.

              U Offline
              U Offline
              user2684
              Contest Winner
              wrote on last edited by
              #38

              @bilbolodz multiple DS18B20 are supported indeed, when you register a DS18B20 sensor and provide the pin where multiple devices are attached, NodeManager will go through all of them (by calling getDeviceCount() of DallasTemperature) and will register each of them with a different child id. Is this what you were looking for?

              B 1 Reply Last reply
              0
              • R Robbie_

                @bilbolodz said in NodeManager: plugin for a rapid development of battery-powered sensors:

                wait(10000);

                Thanks for the fast reply! Still the same issue;

                SEND D=0 I=200 C=0 T=48 S=STARTED I=0 F=0.00
                14258 TSF:MSG:SEND,100-100-0-0,s=200,c=1,t=48,pt=0,l=7,sg=0,ft=0,st=OK:STARTED
                14395 MCO:BGN:INIT OK,TSP=1
                ON P=7
                14426 MCO:SLP:MS=10000,SMS=0,I1=255,M1=255,I2=255,M2=255
                14493 MCO:SLP:TPD
                14512 MCO:SLP:WUP=-1
                DHT I=1 T=nan
                OFF P=7
                SLEEP 60s
                SEND D=0 I=200 C=1 T=48 S=SLEEPING I=0 F=0.00
                
                U Offline
                U Offline
                user2684
                Contest Winner
                wrote on last edited by
                #39

                Hi, @Robbie_ the order doesn't matter since all of this is happening inside before(), NodeManager just keeps track of all your settings without doing anything at that stage.

                Your configuration looks correct to me, the DHT sensor attached to pin 3, pin 6 playing the role of ground, pin 7 the role of vcc and waiting for 10 seconds after powering on, before actually reading the value from the sensor. The log also tells the same story, pin 7 is turned on, then 10s of sleep and then the "nan" read which I cannot really understand (the code is very simple, just executes a digitalWrite(_vcc_pin, HIGH) at that stage).
                Would you please ensure pin 7 is HIGH during the 10s sleep?

                Not sure if it matters (and those more expert than me with a DHT sensor can confirm) but I've noticed that I call dht.begin() only once (during before()) and during loop() I just call readTemperature(). Does powering off the sensor have an impact on this? e.g. should I call begin() before every read?
                Thanks

                R 1 Reply Last reply
                0
                • gohanG Offline
                  gohanG Offline
                  gohan
                  Mod
                  wrote on last edited by
                  #40

                  I think you need to call the begin if you power off the sensor

                  U 1 Reply Last reply
                  0
                  • U user2684

                    @bilbolodz multiple DS18B20 are supported indeed, when you register a DS18B20 sensor and provide the pin where multiple devices are attached, NodeManager will go through all of them (by calling getDeviceCount() of DallasTemperature) and will register each of them with a different child id. Is this what you were looking for?

                    B Offline
                    B Offline
                    bilbolodz
                    wrote on last edited by
                    #41

                    @user2684 said in NodeManager: plugin for a rapid development of battery-powered sensors:

                    @bilbolodz multiple DS18B20 are supported indeed, when you register a DS18B20 sensor and provide the pin where multiple devices are attached, NodeManager will go through all of them (by calling getDeviceCount() of DallasTemperature) and will register each of them with a different child id. Is this what you were looking for?

                    Multiple sensors: great but for me important thing is "fixed" matching exact DS18B20 to particular child id. I'm going to monitor may two function water boiler and check input/output temperature. In case when one of the DS disappear (because of many reasons) after next nodemanager device startup assigning sensors to child id will change and it will be a great problem. That's why I'm asking for exact assigning DS id - child id. Is it clear now?

                    U 1 Reply Last reply
                    0
                    • gohanG gohan

                      I think you need to call the begin if you power off the sensor

                      U Offline
                      U Offline
                      user2684
                      Contest Winner
                      wrote on last edited by
                      #42

                      Thanks @gohan. @Robbie_ if you can then try copying that "_dht->begin();" you have in line 576 of NodeManager.cpp also at the beginning of "SensorDHT::onLoop()" which is just below we can see if this can help (unfortunately I don't have anymore a DHT sensor to test by myself).

                      Another try would be to disable both MySensors and NodeManager debug: I've seen strange behaviors happening when approaching the dynamic memory limit (including this) and since objects are allocated dynamically, it could be the case (this issue is partially mitigated in the dev branch)

                      1 Reply Last reply
                      0
                      • B bilbolodz

                        @user2684 said in NodeManager: plugin for a rapid development of battery-powered sensors:

                        @bilbolodz multiple DS18B20 are supported indeed, when you register a DS18B20 sensor and provide the pin where multiple devices are attached, NodeManager will go through all of them (by calling getDeviceCount() of DallasTemperature) and will register each of them with a different child id. Is this what you were looking for?

                        Multiple sensors: great but for me important thing is "fixed" matching exact DS18B20 to particular child id. I'm going to monitor may two function water boiler and check input/output temperature. In case when one of the DS disappear (because of many reasons) after next nodemanager device startup assigning sensors to child id will change and it will be a great problem. That's why I'm asking for exact assigning DS id - child id. Is it clear now?

                        U Offline
                        U Offline
                        user2684
                        Contest Winner
                        wrote on last edited by
                        #43

                        @bilbolodz I understand what you are saying. I've opened this: https://github.com/mysensors/NodeManager/issues/42. I did not consider this use case before because according to DallasTemperature documentation the attached sensors are always returned in the same order but you're right, if one of the sensor for any reason is not detected, it will mess up your logic. Thanks for reporting it.

                        B V 2 Replies Last reply
                        0
                        • U user2684

                          @bilbolodz I understand what you are saying. I've opened this: https://github.com/mysensors/NodeManager/issues/42. I did not consider this use case before because according to DallasTemperature documentation the attached sensors are always returned in the same order but you're right, if one of the sensor for any reason is not detected, it will mess up your logic. Thanks for reporting it.

                          B Offline
                          B Offline
                          bilbolodz
                          wrote on last edited by
                          #44

                          @user2684 Great, so I'm waiting for version 1.4. Any ideas about timeline?

                          U 1 Reply Last reply
                          0
                          • U user2684

                            @bilbolodz I understand what you are saying. I've opened this: https://github.com/mysensors/NodeManager/issues/42. I did not consider this use case before because according to DallasTemperature documentation the attached sensors are always returned in the same order but you're right, if one of the sensor for any reason is not detected, it will mess up your logic. Thanks for reporting it.

                            V Offline
                            V Offline
                            vikasjee
                            wrote on last edited by
                            #45

                            @user2684 This is exactly i had mentioned in my requirement for IOExpanded pins attached to any sensor or virtual buttons... getting the same child_id everytime. Hope its clear now...

                            1 Reply Last reply
                            0
                            • U user2684

                              Hi, @Robbie_ the order doesn't matter since all of this is happening inside before(), NodeManager just keeps track of all your settings without doing anything at that stage.

                              Your configuration looks correct to me, the DHT sensor attached to pin 3, pin 6 playing the role of ground, pin 7 the role of vcc and waiting for 10 seconds after powering on, before actually reading the value from the sensor. The log also tells the same story, pin 7 is turned on, then 10s of sleep and then the "nan" read which I cannot really understand (the code is very simple, just executes a digitalWrite(_vcc_pin, HIGH) at that stage).
                              Would you please ensure pin 7 is HIGH during the 10s sleep?

                              Not sure if it matters (and those more expert than me with a DHT sensor can confirm) but I've noticed that I call dht.begin() only once (during before()) and during loop() I just call readTemperature(). Does powering off the sensor have an impact on this? e.g. should I call begin() before every read?
                              Thanks

                              R Offline
                              R Offline
                              Robbie_
                              wrote on last edited by Robbie_
                              #46

                              @user2684 Thanks for your reply. Ive tested the following;

                              i editted the NodeManager.cpp and added _dht->begin(); to the beginning of "SensorDHT::onLoop()"

                              I also disabled both debug, still the same issue.

                              In your other post you mentioned "Would you please ensure pin 7 is HIGH during the 10s sleep?"

                              My log looks as following;

                              PWR G=6 V=7
                              REG I=1 P=3 P=6 T=0
                              REG I=2 P=3 P=7 T=1
                              NodeManager v1.30
                              INT1 M=255
                              INT2 M=255
                              RADIO OK
                              PRES I=200, T=23
                              PRES I=201, T=30
                              BATT V=3.26 P=94
                              SEND D=0 I=201 C=0 T=38 S= I=0 F=3.26
                              PRES I=1 T=6
                              PRES I=2 T=7
                              READY
                              
                              MY I=100 M=1
                              SEND D=0 I=200 C=0 T=48 S=STARTED I=0 F=0.00
                              ON P=7
                              DHT I=1 T=nan
                              OFF P=7
                              SLEEP 60s
                              SEND D=0 I=200 C=1 T=48 S=SLEEPING I=0 F=0.00
                              
                              AWAKE
                              SEND D=0 I=200 C=1 T=48 S=AWAKE I=0 F=0.00
                              ON P=7
                              DHT I=1 T=nan
                              OFF P=7
                              SLEEP 60s
                              SEND D=0 I=200 C=1 T=48 S=SLEEPING I=0 F=0.00
                              

                              Where do you want me to messure if the pin is on?

                              AWAKE
                              SEND D=0 I=200 C=1 T=48 S=AWAKE I=0 F=0.00
                              ON P=7
                              DHT I=1 T=nan
                              <------------------------ I messured here and the voltage is 3.something volts
                              OFF P=7
                              SLEEP 60s
                              <--------------------------- HERE?
                              SEND D=0 I=200 C=1 T=48 S=SLEEPING I=0 F=0.00
                              
                              U 1 Reply Last reply
                              1
                              • gohanG Offline
                                gohanG Offline
                                gohan
                                Mod
                                wrote on last edited by
                                #47

                                use a multimeter and check if pin 7 during the startup of the arduino and see if you get 5v out for 10 seconds

                                1 Reply Last reply
                                0
                                • B bilbolodz

                                  @user2684 Great, so I'm waiting for version 1.4. Any ideas about timeline?

                                  U Offline
                                  U Offline
                                  user2684
                                  Contest Winner
                                  wrote on last edited by user2684
                                  #48

                                  @bilbolodz v1.4 is actually ready, just want to see if the DHT issue discussed here requires a code fix or not before releasing but it is already available in the dev branch (https://github.com/mysensors/NodeManager/tree/8280de908929a117287a70e73cd047f50ab9a5bb). Let me explain the way I have implemented it because may look cumbersome but I didn't want to make exceptions and have a sensor configured in a different way the all the others.
                                  First of all, for any sensor, the child id can be manually assigned by providing a third argument to registerSensor(), e.g. to assign child id 5:

                                  nodeManager.registerSensor(SENSOR_THERMISTOR,A1,5);
                                  

                                  This was available also in v1.3 but not very clear from the docs. Of course this approach does not work when you have multiple DS18B20 sensors attached since they are all configured with a single line.
                                  So I have implemented a renameSensor() function which basically assign a different child id, e.g. to give the sensor with child id 1 the child id 5:

                                  nodeManager.renameSensor(1,5);
                                  

                                  This is available for all the sensors. So in the case of multiple DS18B20 you need to register them all in the usual way ( registerSensor(SENSOR_DS18B20,pin)) then assign the child id you like just after so in case one is lost, you still have a static mapping. The alternative would have been to provide a special registerSensor only for DS18B20 which I don't like that much. Any other better alternative of course is more than welcome!

                                  Btw, I have also added for DS18B20 getDeviceAddress() - in case you want to assign the child id based on the device address, getResolution() and setResolution()

                                  B 1 Reply Last reply
                                  0
                                  • R Robbie_

                                    @user2684 Thanks for your reply. Ive tested the following;

                                    i editted the NodeManager.cpp and added _dht->begin(); to the beginning of "SensorDHT::onLoop()"

                                    I also disabled both debug, still the same issue.

                                    In your other post you mentioned "Would you please ensure pin 7 is HIGH during the 10s sleep?"

                                    My log looks as following;

                                    PWR G=6 V=7
                                    REG I=1 P=3 P=6 T=0
                                    REG I=2 P=3 P=7 T=1
                                    NodeManager v1.30
                                    INT1 M=255
                                    INT2 M=255
                                    RADIO OK
                                    PRES I=200, T=23
                                    PRES I=201, T=30
                                    BATT V=3.26 P=94
                                    SEND D=0 I=201 C=0 T=38 S= I=0 F=3.26
                                    PRES I=1 T=6
                                    PRES I=2 T=7
                                    READY
                                    
                                    MY I=100 M=1
                                    SEND D=0 I=200 C=0 T=48 S=STARTED I=0 F=0.00
                                    ON P=7
                                    DHT I=1 T=nan
                                    OFF P=7
                                    SLEEP 60s
                                    SEND D=0 I=200 C=1 T=48 S=SLEEPING I=0 F=0.00
                                    
                                    AWAKE
                                    SEND D=0 I=200 C=1 T=48 S=AWAKE I=0 F=0.00
                                    ON P=7
                                    DHT I=1 T=nan
                                    OFF P=7
                                    SLEEP 60s
                                    SEND D=0 I=200 C=1 T=48 S=SLEEPING I=0 F=0.00
                                    

                                    Where do you want me to messure if the pin is on?

                                    AWAKE
                                    SEND D=0 I=200 C=1 T=48 S=AWAKE I=0 F=0.00
                                    ON P=7
                                    DHT I=1 T=nan
                                    <------------------------ I messured here and the voltage is 3.something volts
                                    OFF P=7
                                    SLEEP 60s
                                    <--------------------------- HERE?
                                    SEND D=0 I=200 C=1 T=48 S=SLEEPING I=0 F=0.00
                                    
                                    U Offline
                                    U Offline
                                    user2684
                                    Contest Winner
                                    wrote on last edited by
                                    #49

                                    @Robbie_ even if unfortunately I do not have a spare DHT sensor to test right now, I did some tests with other sensors trying to understand the issue. My educated guess it that the problem is related to the fact that setPowerPins() set both ground and vcc but initialize both to LOW. This means that when you register the sensor (and the DHT library is initialized), the sensor is off. This behavior will be changed in v1.4 (vcc wil be set to high). What you can do with the version you are currently running is to call nodeManager.powerOn() just after the call to setPowerPins() and before registering the sensor so to keep the power on.

                                    If this does not work, try calling nodeManager.setAutoPowerPins(false) after setPowerPins(): this prevent nodeManager to turn the power off which is not what you want but can help in isolating the issue.
                                    Thanks!

                                    R 1 Reply Last reply
                                    0
                                    • luizrrochaL Offline
                                      luizrrochaL Offline
                                      luizrrocha
                                      wrote on last edited by
                                      #50

                                      Hello, good work !!! I'll be trying your extension very soon....

                                      Quick question: is it compatible with ATMEGA chips flashed with MYSBootloader pre-1.3a ?

                                      U 1 Reply Last reply
                                      0
                                      • luizrrochaL luizrrocha

                                        Hello, good work !!! I'll be trying your extension very soon....

                                        Quick question: is it compatible with ATMEGA chips flashed with MYSBootloader pre-1.3a ?

                                        U Offline
                                        U Offline
                                        user2684
                                        Contest Winner
                                        wrote on last edited by user2684
                                        #51

                                        @luizrrocha I did not test it by myself but the bootloader used should have no impact on the code (unless you need to call different/specific functions with that bootloader but I guess this is not the case).

                                        1 Reply Last reply
                                        0
                                        • U user2684

                                          @Robbie_ even if unfortunately I do not have a spare DHT sensor to test right now, I did some tests with other sensors trying to understand the issue. My educated guess it that the problem is related to the fact that setPowerPins() set both ground and vcc but initialize both to LOW. This means that when you register the sensor (and the DHT library is initialized), the sensor is off. This behavior will be changed in v1.4 (vcc wil be set to high). What you can do with the version you are currently running is to call nodeManager.powerOn() just after the call to setPowerPins() and before registering the sensor so to keep the power on.

                                          If this does not work, try calling nodeManager.setAutoPowerPins(false) after setPowerPins(): this prevent nodeManager to turn the power off which is not what you want but can help in isolating the issue.
                                          Thanks!

                                          R Offline
                                          R Offline
                                          Robbie_
                                          wrote on last edited by
                                          #52

                                          @user2684 Ive tested this morning a DHT22 without resistor between VIN & DATA, now it works correct. I reverted the changes back and just use the default code (1.3), everything keeps functioning. I don't understand why it works but hey, i got data! :-)

                                          Somehow the following issue pops up with domoticz (also before the DHT22 was working), im not sure if anybody can help me here with it, else il open a threat at the domoticz forum. As soon ase NodeManager presents itself (via ESP8266 WiFi Gateway // MyS v2.1.0) to domoticz, domoticz goes offline. Does somebody else had the same experiance?

                                          R 2 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          5

                                          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