Skip to content
Snippets Groups Projects
Commit fbd85052 authored by Torben Petersen's avatar Torben Petersen
Browse files

Adds first prototype of temperature controller Script

parent 196a86af
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3
import paho.mqtt.client as paho
import paho.mqtt.publish as publish
from time import sleep, time
import socket
import struct
import configparser
from threading import Event
import os
CHAMBER_ONE_NAME = "lctc-c01"
CHAMBER_TWO_NAME = "lctc-c04"
# vars for setting the chamber temp
DELTA = 0.5
CHAMBER_ONE_TARGET_TEMP = 10
CHAMBER_TWO_TARGET_TEMP = 10
client_one = paho.Client(client_id="temp_logger_" + CHAMBER_ONE_NAME, clean_session=True)
client_two = paho.Client(client_id="temp_logger_" + CHAMBER_TWO_NAME, clean_session=True)
CHAMBER_ONE_TEMPERATURE_TOPIC = "ds1820/lctc-c01/28-000007fb4c59/temp"
CHAMBER_TWO_TEMPERATURE_TOPIC = "ds1820/lctc-c04/28-000007fbfbcb/temp"
#logging vars
temp_chamber_one = 0
temp_chamber_two = 0
#event flags
temperature_chamber_one_reached = Event()
temperature_chamber_two_reached = Event()
def on_message(client, userdata, msg):
global temp_chamber_one
global temp_chamber_two
if msg.topic == CHAMBER_ONE_TEMPERATURE_TOPIC:
temp, = struct.unpack("d", msg.payload)
temp_chamber_one = temp
if abs( temp - CHAMBER_ONE_TARGET_TEMP ) < DELTA:
temperature_chamber_one_reached.set()
elif msg.topic == CHAMBER_TWO_TEMPERATURE_TOPIC:
temp, = struct.unpack("d", msg.payload)
temp_chamber_two = temp
if abs( temp - CHAMBER_TWO_TARGET_TEMP ) < DELTA:
temperature_chamber_two_reached.set()
else:
print("[on_message] {} {}".format(msg.payload, msg.topic) )
print(" {:0>5} | {:0>5} ".format(temp_chamber_one, temp_chamber_two))
def on_disconnect(client, userdata, rc):
print("[on_disconnect] {}".format( rc ))
def on_connect(client, userdata, flags, rc):
if userdata == CHAMBER_ONE_NAME:
client.subscribe(CHAMBER_ONE_TEMPERATURE_TOPIC, qos=2)
print("Subscribed to topic: {}".format(CHAMBER_ONE_TEMPERATURE_TOPIC))
elif userdata == CHAMBER_TWO_NAME:
client.subscribe(CHAMBER_TWO_TEMPERATURE_TOPIC, qos=2)
print("Subscribed to topic: {}".format(CHAMBER_TWO_TEMPERATURE_TOPIC))
else:
print("Connected to unknwon broker!")
def set_temp_chamber_one(temp):
client_one.publish("chamber/"+CHAMBER_ONE_NAME+"/temp", struct.pack("d", temp), qos=2)
temperature_chamber_one_reached.clear() #Set Event flag to false and Block until set is called
def set_temp_chamber_two(temp):
client_two.publish("chamber/"+CHAMBER_TWO_NAME+"/temp", struct.pack("d", temp), qos=2)
temperature_chamber_two_reached.clear() #Set Event flag to false and Block until set is called
if __name__ == "__main__":
SERVERNAME = "{}.ibr.cs.tu-bs.de".format(CHAMBER_ONE_NAME)
print(SERVERNAME)
client_one.connect( SERVERNAME, port=1883, keepalive=5 )
client_one.user_data_set(CHAMBER_ONE_NAME)
client_one.on_connect = on_connect
client_one.on_message = on_message
client_one.on_disconnect = on_disconnect
client_one.loop_start()
SERVERNAME = "{}.ibr.cs.tu-bs.de".format(CHAMBER_TWO_NAME)
print(SERVERNAME)
client_two.connect( SERVERNAME, port=1883, keepalive=5 )
client_two.user_data_set(CHAMBER_TWO_NAME)
client_two.on_connect = on_connect
client_two.on_message = on_message
client_two.on_disconnect = on_disconnect
client_two.loop_start()
#init arrays with temps for both chambers
chamber_one_temperature_values = [10, 25, 40]
chamber_two_temperature_values = [10, 25, 40]
while True:
for chamber_one_numerator in range(0, len(temperature_values)):
for chamber_two_numerator in range(0, len(temperature_values)):
CHAMBER_ONE_TARGET_TEMP = temperature_values[chamber_one_numerator]
CHAMBER_TWO_TARGET_TEMP = temperature_values[chamber_two_numerator]
print("Target temps for the chambers: {} | {}".format(CHAMBER_ONE_TARGET_TEMP, CHAMBER_TWO_TARGET_TEMP))
set_temp_chamber_one(CHAMBER_ONE_TARGET_TEMP)
set_temp_chamber_two(CHAMBER_TWO_TARGET_TEMP)
#wait until both temperatures are reached
while not ( temperature_chamber_one_reached.wait() and temperature_chamber_one_reached.wait() )
pass
#wait for 30 Minutes
time.sleep( 60 * 15)
#invert array for chamber two
chamber_two_temperature_values = chamber_two_temperature_values[::-1]
#invert array for chamber one
chamber_one_temperature_values = chamber_one_temperature_values[::-1]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment