aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.env4
-rw-r--r--pi_temp_pid.py52
2 files changed, 29 insertions, 27 deletions
diff --git a/.env b/.env
index e18d4aa..ac8fe0f 100644
--- a/.env
+++ b/.env
@@ -4,7 +4,7 @@ kd=0
target_temperature=24
sample_time=15
# todo: check both of below!:
-relay_pin=22
-mosfet_pin=5
+relay_pin=5
+mosfet_pin=12
read_retry=3
read_frequency_sec=15
diff --git a/pi_temp_pid.py b/pi_temp_pid.py
index edb6c29..8be1fd4 100644
--- a/pi_temp_pid.py
+++ b/pi_temp_pid.py
@@ -174,9 +174,6 @@ class ShroomboxSettings(BaseSettings):
case_sensitive = True
-settings = read_settings()
-
-
def read_settings():
global settings
try:
@@ -187,6 +184,9 @@ def read_settings():
return settings
+settings = read_settings()
+
+
class ShroomboxManager:
"""
Shroombox class.
@@ -196,12 +196,12 @@ class ShroomboxManager:
self.current_temperature = float('NaN')
self.gpio = pigpio.pi()
# Is below a good idea?
- self.relay_switch(False)
+ self.relay_switch(on=True)
# gpio_status: on is 0, off is 1
self.gpio_status = self.gpio.read(settings.relay_pin)
def __del__(self):
- self.relay_switch(True)
+ self.relay_switch(on=False) # FIXME: this doesn't work as class instance is already gone with gpio instance
def callback(self):
"""
@@ -211,10 +211,10 @@ class ShroomboxManager:
while True:
# Get current temperature
temp = self.read()
- # Try to write to CSV file
- self.write(temp)
# Get PID value for MOSFET
val = self.temp_control(temp)
+ # Try to write to CSV file
+ self.write(temp, val)
# Set MOSFET to PID value
self.mosfet_set(val)
time.sleep(settings.read_frequency_sec)
@@ -251,33 +251,35 @@ class ShroomboxManager:
@staticmethod
def write(
datum: float,
+ kp: float,
) -> bool:
"""
Method writing data point to csv file.
CSV file header: timestamp,temperature
:param datum: float
+ :param kp: float
:return: bool
"""
result = True
if not os.path.exists(DATA_FILE):
try:
- os.makedirs(DATA_FOLDER)
with open(DATA_FILE, 'w', encoding='UTF-8') as _file:
- header = "timestamp,temperature"
- _file.write(header)
+ header = "timestamp,temperature,kp"
+ wrtr = writer(_file)
+ wrtr.writerow(header)
result = False
except OSError as exc:
- logger.error("Couldn't create path %DATA_FILE %exc")
+ logger.error("Couldn't create path %s, %s", DATA_FILE, exc)
result = True
try:
with open(DATA_FILE, 'a', encoding='UTF-8') as _file:
wrtr = writer(_file)
timestamp = time.strftime(TIMEFORMAT)
- wrtr.writerow((timestamp, datum))
+ wrtr.writerow((timestamp, datum, kp))
result = False
except FileNotFoundError as exc:
result = True
- logger.error('Data file not found: %exc')
+ logger.error('Data file not found: %s', exc)
return result
def relay_switch(
@@ -285,22 +287,22 @@ class ShroomboxManager:
on: bool = False,
) -> None:
"""
- Turn relay on or off.
+ Turn relay on or off
:param on: bool
:return: None
"""
if on:
- logger.info('Turning on relay %time_now()')
+ logger.info('Turning on relay %s', time_now())
try:
self.gpio.write(settings.relay_pin, 0)
except Exception as exc:
- logger.warning('Failed to turn on relay: %exc')
+ logger.warning('Failed to turn on relay: %s', exc)
else:
- logger.info('Turning off relay %time_now()')
+ logger.info('Turning off relay %s', time_now())
try:
self.gpio.write(settings.relay_pin, 1)
except Exception as exc:
- logger.warning('Failed to turn off relay: %exc')
+ logger.warning('Failed to turn off relay: %s', exc)
@staticmethod
def temp_control(
@@ -312,13 +314,13 @@ class ShroomboxManager:
:return: int
"""
pid = PID(
- settings.kp,
- settings.ki,
- settings.kd,
+ Kp=settings.kp,
+ Ki=settings.ki,
+ Kd=settings.kd,
setpoint=settings.target_temperature,
+ sample_time=settings.sample_time,
+ output_limits=(0, 255),
)
- pid.output_limits = (0, 255)
- pid.sample_time = settings.sample_time
return int(pid(current_temperature)) # TODO: check if it can be done nicer
def mosfet_set(
@@ -330,12 +332,12 @@ class ShroomboxManager:
:param value: int
:return: bool
"""
- logger.debug(f'Changing pin {settings.mosfet_pin} to {value}')
+ logger.debug('Changing pin %s to %s', settings.mosfet_pin, value)
try:
self.gpio.set_PWM_dutycycle(settings.mosfet_pin, value)
result = False
except Exception as exc:
- logger.warning('Failed to set mosfet value: %exc.')
+ logger.warning('Failed to set mosfet value: %s', exc)
result = True
return result