Hi all.
Got MQTT working after a while. Now i have this script below reading some temperatures for me.
Two questions, first is that when the temperature is on the + side it gives the reading including the celcius icon. But when its on the - side it does not include the celcius icon. Any easy for this that i am missing?
Edit; Also for the temperature, i would love if it can be rounded down to just one decimal.
Second part, i want to secure this more. So i have added a username and password for connecting to my mqtt broker. But i am struggling to incorporate that into the script. Any help there would be super helpful.
#!/usr/bin/python3
# Import package
import os
import glob
import time
import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
# Def
broker = "192.168.10.169"
state_topic = "/home/temperature/bod"
delay = 30
# Initialize the GPIO Pins
os.system('modprobe w1-gpio') # Turns on the GPIO module
os.system('modprobe w1-therm') # Turns on the Temperature module
# Finds the correct device file that holds the temperature data
base_dir = '/sys/bus/w1/devices/'
device_folder = '/sys/bus/w1/devices/28-04172189c1ff'
device_file = device_folder + '/w1_slave'
# A function that reads the sensors data
def read_temp_raw():
f = open(device_file, 'r') # Opens the temperature device file
lines = f.readlines() # Returns the text
f.close()
return lines
# Convert the value of the sensor into a temperature
def read_temp():
lines = read_temp_raw() # Read the temperature 'device file'
# While the first line does not contain 'YES', wait for 0.2s
# and then read the device file again.
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
# Look for the position of the '=' in the second line of the
# device file.
equals_pos = lines[1].find('t=')
# If the '=' is found, convert the rest of the line after the
# '=' into degrees Celsius
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
return temp_c
############### MQTT section ##################
client = mqtt.Client()
client.connect(broker)
client.loop_start()
while True:
print(read_temp())
time.sleep(1)
sensor_data = read_temp()
client.publish("/home/temperature/bod", str(sensor_data))
time.sleep(delay)