44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
import numpy as np
|
|
import time
|
|
|
|
class MockSerial:
|
|
def __init__(self):
|
|
self.humidity = np.zeros(100)
|
|
self.humidifier_on = False
|
|
self.humidity[:] = 80
|
|
self.humidity[-1] = 20
|
|
self.humidity[0] = 20
|
|
|
|
def flush(self):
|
|
pass
|
|
|
|
def write(self, msg):
|
|
if msg == b'h':
|
|
print("mock hum toggle")
|
|
self.humidifier_on = not self.humidifier_on
|
|
|
|
def read(self, _):
|
|
t = time.time()
|
|
temp = 25 + np.sin(0.01*2*np.pi*t) + 0.5*np.sin(0.0001*2*np.pi*t + 7)
|
|
|
|
# very janky model of humidity diffusion
|
|
# fix end conditions
|
|
for _ in range(20):
|
|
self.humidity[-1] = 0.2*20 + 0.8*self.humidity[-2]
|
|
self.humidity[0] = 20
|
|
if self.humidifier_on:
|
|
self.humidity[20] = 2
|
|
# use the gradient to determine the change in humidity
|
|
avg = 0.5*(self.humidity[:-2] + self.humidity[2:])
|
|
self.humidity[1:-1] += 0.10*(avg - self.humidity[1:-1])
|
|
#print(self.humidity)
|
|
|
|
humidity = self.humidity[60] + np.random.random()*0.003
|
|
if self.humidifier_on:
|
|
hv = 3.3
|
|
else:
|
|
hv = 0.0
|
|
return bytes("{},{},{}\n".format(humidity, temp, hv), "utf8")
|
|
|
|
|