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. Troubleshooting
  3. Two identical Si7021 nodes - one just sending temperature

Two identical Si7021 nodes - one just sending temperature

Scheduled Pinned Locked Moved Troubleshooting
2 Posts 2 Posters 599 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.
  • Z Offline
    Z Offline
    zerosquared
    wrote on last edited by
    #1

    Hey there!
    I'm facing a problem that maybe is totally easy because I'm missing something, but I just can't find the problem.

    I have two identical nodes: Arduino Nano, NRF24L01+, SI7021 Sensor.
    The code on both is identical (see below) for everything but the node-ID.

    For some reason the first node (MY_NODE_ID 1) will just send the temperature value to my gateway, however I can see that the sensor reports the humidity value in the serial debugger.
    With MQTT.fx I can see, that node 2 sends the temperature-data to mygateway1-out/2/1/1/0/0; the humidity-data to mygateway1-out/2/1/0/1/0 and node 1 sends just the temperature to mygateway1-out/1/1/1/0/0, nothing else.

    What am I missing? I'll post the debug-log down below.
    If anyone can help me I'd be really glad.
    Thank you very much in advance!

    Here is the code from the node; in this case with ID 1; the second node has the ID set to 2.

    // Enable debug prints
    #define MY_DEBUG
    #define MY_NODE_ID 1
    
    // Enable REPORT_BATTERY_LEVEL to measure battery level and send changes to gateway
    //#define REPORT_BATTERY_LEVEL
    
    // Enable and select radio type attached 
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    //#define MY_RS485
    
    #include <MySensors.h>  
    
    #define CHILD_ID_HUM  0
    #define CHILD_ID_TEMP 1
    
    static bool metric = true;
    
    // Sleep time between sensor updates (in milliseconds)
    static const uint64_t UPDATE_INTERVAL = 10000;
    
    #include <SI7021.h>
    static SI7021 sensor;
    
    #ifdef REPORT_BATTERY_LEVEL
    #include <Vcc.h>
    static uint8_t oldBatteryPcnt = 200;  // Initialize to 200 to assure first time value will be sent.
    const float VccMin        = 1.8;      // Minimum expected Vcc level, in Volts: Brownout at 1.8V    -> 0%
    const float VccMax        = 2.0*1.6;  // Maximum expected Vcc level, in Volts: 2xAA fresh Alkaline -> 100%
    const float VccCorrection = 1.0;      // Measured Vcc by multimeter divided by reported Vcc
    static Vcc vcc(VccCorrection); 
    #endif
    
    void presentation()  
    { 
      // Send the sketch info to the gateway
      sendSketchInfo("TemperatureAndHumidity Si7021", "1.0");
    
      // Present sensors as children to gateway
      present(CHILD_ID_HUM, S_HUM,   "Humidity");
      present(CHILD_ID_TEMP, S_TEMP, "Temperature");
    
      metric = getControllerConfig().isMetric;
    }
    
    void setup()
    {
      while (not sensor.begin())
      {
        Serial.println(F("Sensor not detected!"));
        delay(5000);
      }
    }
    
    
    void loop()      
    {  
      // Read temperature & humidity from sensor.
      const float temperature = float( metric ? sensor.getCelsiusHundredths() : sensor.getFahrenheitHundredths() ) / 100.0;
      const float humidity    = float( sensor.getHumidityBasisPoints() ) / 100.0;
    
    #ifdef MY_DEBUG
      Serial.print(F("Temp "));
      Serial.print(temperature);
      Serial.print(metric ? 'C' : 'F');
      Serial.print(F("\tHum "));
      Serial.println(humidity);
    #endif
    
      static MyMessage msgHum( CHILD_ID_HUM,  V_HUM );
      static MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
    
      send(msgTemp.set(temperature, 2));
      send(msgHum.set(humidity, 2));
    
    #ifdef REPORT_BATTERY_LEVEL
      const uint8_t batteryPcnt = static_cast<uint8_t>(0.5 + vcc.Read_Perc(VccMin, VccMax));
    
    #ifdef MY_DEBUG
      Serial.print(F("Vbat "));
      Serial.print(vcc.Read_Volts());
      Serial.print(F("\tPerc "));
      Serial.println(batteryPcnt);
    #endif
    
      // Battery readout should only go down. So report only when new value is smaller than previous one.
      if ( batteryPcnt < oldBatteryPcnt )
      {
          sendBatteryLevel(batteryPcnt);
          oldBatteryPcnt = batteryPcnt;
      }
    #endif
    
      // Sleep until next update to save energy
      sleep(UPDATE_INTERVAL); 
    }
    

    Heres the debug-log from node 1:

    16 MCO:BGN:INIT NODE,CP=RNNNA---,REL=255,VER=2.3.1
    26 TSM:INIT
    27 TSF:WUR:MS=0
    33 TSM:INIT:TSP OK
    35 TSM:INIT:STATID=1
    37 TSF:SID:OK,ID=1
    39 TSM:FPAR
    75 TSF:MSG:SEND,1-1-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    156 TSF:MSG:READ,0-0-1,s=255,c=3,t=8,pt=1,l=1,sg=0:0
    160 TSF:MSG:FPAR OK,ID=0,D=1
    2082 TSM:FPAR:OK
    2083 TSM:ID
    2084 TSM:ID:OK
    2086 TSM:UPL
    2089 TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
    2104 TSF:MSG:READ,0-0-1,s=255,c=3,t=25,pt=1,l=1,sg=0:1
    2108 TSF:MSG:PONG RECV,HP=1
    2111 TSM:UPL:OK
    2112 TSM:READY:ID=1,PAR=0,DIS=1
    2152 !TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=NACK:0100
    4195 !TSF:MSG:SEND,1-1-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=1,st=NACK:2.3.1
    4238 !TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=2,st=NACK:0
    6246 TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=11,pt=0,l=25,sg=0,ft=3,st=OK:TemperatureAndHumidity Si
    6291 !TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=NACK:1.0
    6337 !TSF:MSG:SEND,1-1-0-0,s=0,c=0,t=7,pt=0,l=8,sg=0,ft=1,st=NACK:Humidity
    6385 !TSF:MSG:SEND,1-1-0-0,s=1,c=0,t=6,pt=0,l=11,sg=0,ft=2,st=NACK:Temperature
    6392 MCO:REG:REQ
    6429 !TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=3,st=NACK:2
    8436 TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=4,st=OK:2
    8448 TSF:MSG:READ,0-0-1,s=255,c=3,t=27,pt=1,l=1,sg=0:1
    8453 MCO:PIM:NODE REG=1
    8455 MCO:BGN:STP
    8457 MCO:BGN:INIT OK,TSP=1
    Temp 20.02C	Hum 56.63
    8522 !TSF:MSG:SEND,1-1-0-0,s=1,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=NACK:20.02
    8567 !TSF:MSG:SEND,1-1-0-0,s=0,c=1,t=1,pt=7,l=5,sg=0,ft=1,st=NACK:56.63
    8573 MCO:SLP:MS=10000,SMS=0,I1=255,M1=255,I2=255,M2=255
    8579 TSF:TDI:TSL
    8581 MCO:SLP:WUP=-1
    8583 TSF:TRI:TSB
    Temp 20.01C	Hum 56.64
    8651 !TSF:MSG:SEND,1-1-0-0,s=1,c=1,t=0,pt=7,l=5,sg=0,ft=2,st=NACK:20.01
    8696 !TSF:MSG:SEND,1-1-0-0,s=0,c=1,t=1,pt=7,l=5,sg=0,ft=3,st=NACK:56.64
    8702 MCO:SLP:MS=10000,SMS=0,I1=255,M1=255,I2=255,M2=255
    8708 TSF:TDI:TSL
    8710 MCO:SLP:WUP=-1
    8712 TSF:TRI:TSB
    Temp 20.01C	Hum 56.58
    8744 TSF:MSG:SEND,1-1-0-0,s=1,c=1,t=0,pt=7,l=5,sg=0,ft=4,st=OK:20.01
    8790 !TSF:MSG:SEND,1-1-0-0,s=0,c=1,t=1,pt=7,l=5,sg=0,ft=0,st=NACK:56.58
    8796 MCO:SLP:MS=10000,SMS=0,I1=255,M1=255,I2=255,M2=255
    8801 TSF:TDI:TSL
    8803 MCO:SLP:WUP=-1
    8805 TSF:TRI:TSB
    
    rejoe2R 1 Reply Last reply
    0
    • Z zerosquared

      Hey there!
      I'm facing a problem that maybe is totally easy because I'm missing something, but I just can't find the problem.

      I have two identical nodes: Arduino Nano, NRF24L01+, SI7021 Sensor.
      The code on both is identical (see below) for everything but the node-ID.

      For some reason the first node (MY_NODE_ID 1) will just send the temperature value to my gateway, however I can see that the sensor reports the humidity value in the serial debugger.
      With MQTT.fx I can see, that node 2 sends the temperature-data to mygateway1-out/2/1/1/0/0; the humidity-data to mygateway1-out/2/1/0/1/0 and node 1 sends just the temperature to mygateway1-out/1/1/1/0/0, nothing else.

      What am I missing? I'll post the debug-log down below.
      If anyone can help me I'd be really glad.
      Thank you very much in advance!

      Here is the code from the node; in this case with ID 1; the second node has the ID set to 2.

      // Enable debug prints
      #define MY_DEBUG
      #define MY_NODE_ID 1
      
      // Enable REPORT_BATTERY_LEVEL to measure battery level and send changes to gateway
      //#define REPORT_BATTERY_LEVEL
      
      // Enable and select radio type attached 
      #define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      //#define MY_RS485
      
      #include <MySensors.h>  
      
      #define CHILD_ID_HUM  0
      #define CHILD_ID_TEMP 1
      
      static bool metric = true;
      
      // Sleep time between sensor updates (in milliseconds)
      static const uint64_t UPDATE_INTERVAL = 10000;
      
      #include <SI7021.h>
      static SI7021 sensor;
      
      #ifdef REPORT_BATTERY_LEVEL
      #include <Vcc.h>
      static uint8_t oldBatteryPcnt = 200;  // Initialize to 200 to assure first time value will be sent.
      const float VccMin        = 1.8;      // Minimum expected Vcc level, in Volts: Brownout at 1.8V    -> 0%
      const float VccMax        = 2.0*1.6;  // Maximum expected Vcc level, in Volts: 2xAA fresh Alkaline -> 100%
      const float VccCorrection = 1.0;      // Measured Vcc by multimeter divided by reported Vcc
      static Vcc vcc(VccCorrection); 
      #endif
      
      void presentation()  
      { 
        // Send the sketch info to the gateway
        sendSketchInfo("TemperatureAndHumidity Si7021", "1.0");
      
        // Present sensors as children to gateway
        present(CHILD_ID_HUM, S_HUM,   "Humidity");
        present(CHILD_ID_TEMP, S_TEMP, "Temperature");
      
        metric = getControllerConfig().isMetric;
      }
      
      void setup()
      {
        while (not sensor.begin())
        {
          Serial.println(F("Sensor not detected!"));
          delay(5000);
        }
      }
      
      
      void loop()      
      {  
        // Read temperature & humidity from sensor.
        const float temperature = float( metric ? sensor.getCelsiusHundredths() : sensor.getFahrenheitHundredths() ) / 100.0;
        const float humidity    = float( sensor.getHumidityBasisPoints() ) / 100.0;
      
      #ifdef MY_DEBUG
        Serial.print(F("Temp "));
        Serial.print(temperature);
        Serial.print(metric ? 'C' : 'F');
        Serial.print(F("\tHum "));
        Serial.println(humidity);
      #endif
      
        static MyMessage msgHum( CHILD_ID_HUM,  V_HUM );
        static MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      
        send(msgTemp.set(temperature, 2));
        send(msgHum.set(humidity, 2));
      
      #ifdef REPORT_BATTERY_LEVEL
        const uint8_t batteryPcnt = static_cast<uint8_t>(0.5 + vcc.Read_Perc(VccMin, VccMax));
      
      #ifdef MY_DEBUG
        Serial.print(F("Vbat "));
        Serial.print(vcc.Read_Volts());
        Serial.print(F("\tPerc "));
        Serial.println(batteryPcnt);
      #endif
      
        // Battery readout should only go down. So report only when new value is smaller than previous one.
        if ( batteryPcnt < oldBatteryPcnt )
        {
            sendBatteryLevel(batteryPcnt);
            oldBatteryPcnt = batteryPcnt;
        }
      #endif
      
        // Sleep until next update to save energy
        sleep(UPDATE_INTERVAL); 
      }
      

      Heres the debug-log from node 1:

      16 MCO:BGN:INIT NODE,CP=RNNNA---,REL=255,VER=2.3.1
      26 TSM:INIT
      27 TSF:WUR:MS=0
      33 TSM:INIT:TSP OK
      35 TSM:INIT:STATID=1
      37 TSF:SID:OK,ID=1
      39 TSM:FPAR
      75 TSF:MSG:SEND,1-1-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      156 TSF:MSG:READ,0-0-1,s=255,c=3,t=8,pt=1,l=1,sg=0:0
      160 TSF:MSG:FPAR OK,ID=0,D=1
      2082 TSM:FPAR:OK
      2083 TSM:ID
      2084 TSM:ID:OK
      2086 TSM:UPL
      2089 TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
      2104 TSF:MSG:READ,0-0-1,s=255,c=3,t=25,pt=1,l=1,sg=0:1
      2108 TSF:MSG:PONG RECV,HP=1
      2111 TSM:UPL:OK
      2112 TSM:READY:ID=1,PAR=0,DIS=1
      2152 !TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=NACK:0100
      4195 !TSF:MSG:SEND,1-1-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=1,st=NACK:2.3.1
      4238 !TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=2,st=NACK:0
      6246 TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=11,pt=0,l=25,sg=0,ft=3,st=OK:TemperatureAndHumidity Si
      6291 !TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=NACK:1.0
      6337 !TSF:MSG:SEND,1-1-0-0,s=0,c=0,t=7,pt=0,l=8,sg=0,ft=1,st=NACK:Humidity
      6385 !TSF:MSG:SEND,1-1-0-0,s=1,c=0,t=6,pt=0,l=11,sg=0,ft=2,st=NACK:Temperature
      6392 MCO:REG:REQ
      6429 !TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=3,st=NACK:2
      8436 TSF:MSG:SEND,1-1-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=4,st=OK:2
      8448 TSF:MSG:READ,0-0-1,s=255,c=3,t=27,pt=1,l=1,sg=0:1
      8453 MCO:PIM:NODE REG=1
      8455 MCO:BGN:STP
      8457 MCO:BGN:INIT OK,TSP=1
      Temp 20.02C	Hum 56.63
      8522 !TSF:MSG:SEND,1-1-0-0,s=1,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=NACK:20.02
      8567 !TSF:MSG:SEND,1-1-0-0,s=0,c=1,t=1,pt=7,l=5,sg=0,ft=1,st=NACK:56.63
      8573 MCO:SLP:MS=10000,SMS=0,I1=255,M1=255,I2=255,M2=255
      8579 TSF:TDI:TSL
      8581 MCO:SLP:WUP=-1
      8583 TSF:TRI:TSB
      Temp 20.01C	Hum 56.64
      8651 !TSF:MSG:SEND,1-1-0-0,s=1,c=1,t=0,pt=7,l=5,sg=0,ft=2,st=NACK:20.01
      8696 !TSF:MSG:SEND,1-1-0-0,s=0,c=1,t=1,pt=7,l=5,sg=0,ft=3,st=NACK:56.64
      8702 MCO:SLP:MS=10000,SMS=0,I1=255,M1=255,I2=255,M2=255
      8708 TSF:TDI:TSL
      8710 MCO:SLP:WUP=-1
      8712 TSF:TRI:TSB
      Temp 20.01C	Hum 56.58
      8744 TSF:MSG:SEND,1-1-0-0,s=1,c=1,t=0,pt=7,l=5,sg=0,ft=4,st=OK:20.01
      8790 !TSF:MSG:SEND,1-1-0-0,s=0,c=1,t=1,pt=7,l=5,sg=0,ft=0,st=NACK:56.58
      8796 MCO:SLP:MS=10000,SMS=0,I1=255,M1=255,I2=255,M2=255
      8801 TSF:TDI:TSL
      8803 MCO:SLP:WUP=-1
      8805 TSF:TRI:TSB
      
      rejoe2R Offline
      rejoe2R Offline
      rejoe2
      wrote on last edited by
      #2

      @zerosquared
      Imo there's not really a problem with the sensor itself but with the transmission towards the GW.

      8696 !TSF:MSG:SEND,1-1-0-0,s=0,c=1,t=1,pt=7,l=5,sg=0,ft=3,st=NACK:56.64
      

      The only exception in your log is wrt one temperature reading. So have a look at the troubleshooting guide; especially use a capacitor to enhance power sourcing of the nRF modules.

      Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

      1 Reply Last reply
      1

      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
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      14

      Online

      12.0k

      Users

      11.2k

      Topics

      113.4k

      Posts


      Copyright 2025 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