- permit heater to override power
This commit is contained in:
Regular → Executable
+8
-5
@@ -14,10 +14,11 @@ class HeaterTask(ATask):
|
|||||||
self.msg_handler = msg_handler
|
self.msg_handler = msg_handler
|
||||||
msg_handler.set_recv_handler(self.recv)
|
msg_handler.set_recv_handler(self.recv)
|
||||||
self.power_soll = 0
|
self.power_soll = 0
|
||||||
|
self.power_actor = 0
|
||||||
self.pulse_counter = 0
|
self.pulse_counter = 0
|
||||||
|
|
||||||
def actor(self, y):
|
def actor(self, y):
|
||||||
self.power_soll = max(0, self.device.get_power_max() * y)
|
self.power_actor = max(0, self.device.get_power_max() * y)
|
||||||
|
|
||||||
def on_changed_active(self, is_activated):
|
def on_changed_active(self, is_activated):
|
||||||
asyncio.create_task(self.send({'Activate': int(is_activated)}))
|
asyncio.create_task(self.send({'Activate': int(is_activated)}))
|
||||||
@@ -44,23 +45,25 @@ class HeaterTask(ATask):
|
|||||||
|
|
||||||
with self.device.open():
|
with self.device.open():
|
||||||
while True:
|
while True:
|
||||||
|
power_soll = max(self.power_soll, self.power_actor)
|
||||||
on_count = pulse_period_count
|
on_count = pulse_period_count
|
||||||
if self.device.get_power_min() > 0:
|
if self.device.get_power_min() > 0:
|
||||||
on_count = pulse_period_count*min(1, self.power_soll / self.device.get_power_min())
|
on_count = pulse_period_count*min(1, power_soll / self.device.get_power_min())
|
||||||
|
|
||||||
self.pulse_counter += 1
|
self.pulse_counter += 1
|
||||||
if self.pulse_counter >= pulse_period_count:
|
if self.pulse_counter >= pulse_period_count:
|
||||||
self.pulse_counter = 0
|
self.pulse_counter = 0
|
||||||
|
|
||||||
if self.power_soll < self.device.get_power_min():
|
if power_soll < self.device.get_power_min():
|
||||||
if self.power_soll == 0 or self.pulse_counter >= on_count:
|
if power_soll == 0 or self.pulse_counter >= on_count:
|
||||||
self.device.set_power(0)
|
self.device.set_power(0)
|
||||||
elif self.pulse_counter < on_count:
|
elif self.pulse_counter < on_count:
|
||||||
self.device.set_power(self.device.get_power_min())
|
self.device.set_power(self.device.get_power_min())
|
||||||
else:
|
else:
|
||||||
self.device.set_power(self.power_soll)
|
self.device.set_power(power_soll)
|
||||||
|
|
||||||
self.device.process()
|
self.device.process()
|
||||||
await asyncio.sleep(self.interval)
|
await asyncio.sleep(self.interval)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user