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