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


      21

      Online

      11.7k

      Users

      11.2k

      Topics

      113.1k

      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