Chorlton Wheelies
Chorlton Wheelies

Reputation: 1

Displaying signed floats in Python

Until this month, my outdoor DHT22 temperature/humidity monitor has been working fine. However, with the cold weather, and temperatures now sub-zero, I've noticed that my routine is failing to handle negative temperatures - instead they are represented as being positive: the sign has been lost.

I've adjusted my re.search routine to include negative numbers where previously they were excluded,

 # Continuously append data
 while(True):
 # Run the DHT program to get the humidity and temperature readings!
 # DHT22 (Credit to Adafruit)
 output = subprocess.check_output(["/home/pi/scripts/DHT/Adafruit_DHT", "22", "25"]);
 rasp = subprocess.check_output(["vcgencmd", "measure_temp"])
 print output
 matches = re.search("Temp =\s+-([0-9.]+)", output)
 if (not matches):
      time.sleep(3)
      continue
 tempa = float(matches.group(1))
 print tempa

When I

 print output

a string is produced containing the negative temperature.

However, when I

print tempa

it displays as a positive number.

I need to be able to carry the sign into the variable, as temperatures could be either positive or negative (even in a UK winter).

Can anyone help?

Upvotes: 0

Views: 129

Answers (2)

pauliusbau
pauliusbau

Reputation: 26

I just tried it, and only "-" sign is not enough.. If you want to measure positive and negative temperatures, regexp string should look like this:

"Temp =\s+([-+]?[0-9.]+)"  

Upvotes: 0

Karoly Horvath
Karoly Horvath

Reputation: 96306

The negative sign is not captured in the match group because currently it's not part of it.

"Temp =\s+(-[0-9.]+)"
          ^ fix

Upvotes: 2

Related Questions