diff --git a/components/sensor/tempSensorSim.py b/components/sensor/tempSensorSim.py index 06ce32d..07c8fa4 100644 --- a/components/sensor/tempSensorSim.py +++ b/components/sensor/tempSensorSim.py @@ -42,4 +42,5 @@ class TempSensorSim(ATemperatureSensor): innovation = self.stirrer_sigma * np.sqrt(2.0 * alpha) * np.random.normal() self._stirrer_state = (1.0 - alpha) * self._stirrer_state + innovation - return self.temp_set + self.offset + white + self._stirrer_state + self.temp = self.temp_set + self.offset + white + self._stirrer_state + return self.temp diff --git a/components/sensor/tempSensor_max31865.py b/components/sensor/tempSensor_max31865.py index ae64f10..195efa1 100755 --- a/components/sensor/tempSensor_max31865.py +++ b/components/sensor/tempSensor_max31865.py @@ -47,7 +47,8 @@ class TempSensor_max31865(ATemperatureSensor): def temperature(self): digits = self.read_digits() - return self.temp_offset + self.to_temperature(digits) + self.temp = self.temp_offset + self.to_temperature(digits) + return self.temp @staticmethod def to_temperature(digits): diff --git a/server/brewpi.py b/server/brewpi.py index 334f013..013d8d5 100755 --- a/server/brewpi.py +++ b/server/brewpi.py @@ -182,7 +182,7 @@ if __name__ == '__main__': sud_task.set_on_end(lambda: (heater_task.shutdown(), sud_log_task.stop_run())) # Assign temp. sensor readings to tc - sensor_task.set_on_changed("temp", ChangedFloat(tc.set_theta_ist, prec=2).set) + sensor.set_on_changed("temp", ChangedFloat(tc.set_theta_ist, prec=2).set) heater.set_on_changed("power_set", tc.set_model_power) diff --git a/tasks/tempsensor.py b/tasks/tempsensor.py index a023fe4..62c0654 100644 --- a/tasks/tempsensor.py +++ b/tasks/tempsensor.py @@ -12,8 +12,12 @@ class TempSensorTask(ATask): self.msg_handler = msg_handler msg_handler.set_recv_handler(self.recv) self.sensor = sensor_device - self.temp = self.sensor.temperature() - self.set_on_changed("temp", ChangedFloat(self.on_temp_changed, prec=1).set) + # Prime before registering - temperature() sets self.sensor.temp, + # which would otherwise fire on_temp_changed() (and its + # asyncio.create_task()) before the event loop is running, since + # all tasks are built synchronously at module level in brewpi.py. + self.sensor.temperature() + self.sensor.set_on_changed("temp", ChangedFloat(self.on_temp_changed, prec=1).set) def on_temp_changed(self, value): asyncio.create_task(self.send({'Temp': value})) @@ -26,5 +30,5 @@ class TempSensorTask(ATask): async def on_process(self): while True: - self.temp = self.sensor.temperature() + self.sensor.temperature() await asyncio.sleep(self.interval)