- redefine activate method

- for task introduced open() conext method
This commit is contained in:
jens
2020-12-18 15:58:02 +01:00
parent a3510ffe8f
commit 4e508c86c5
9 changed files with 85 additions and 62 deletions
+25 -28
View File
@@ -6,10 +6,10 @@ from utils.value import ChangedInteger
class HeaterTask(ATask):
def __init__(self, heater_device: AHeater, interval, msg_handler: MsgIo):
def __init__(self, device: AHeater, interval, msg_handler: MsgIo):
ATask.__init__(self, interval)
self.heater = heater_device
self.device = device
self.interval = interval
self.msg_handler = msg_handler
msg_handler.set_recv_handler(self.recv)
@@ -17,7 +17,7 @@ class HeaterTask(ATask):
self.pulse_counter = 0
def actor(self, y):
self.power_soll = max(0, 250 + self.heater.get_power_max() * y)
self.power_soll = max(0, 250 + self.device.get_power_max() * y)
def on_changed_active(self, is_activated):
asyncio.create_task(self.send({'Activate': int(is_activated)}))
@@ -29,45 +29,42 @@ class HeaterTask(ATask):
for pair in data.items():
if 'Power' in pair[0]:
self.power_soll = pair[1]
if 'Activate' in pair[0]:
self.heater.activate(pair[1] == 1)
async def send(self, data):
await self.msg_handler.send(data)
async def on_process(self):
print("{}: Started with interval {} s".format(self.msg_handler.get_key(), self.interval))
await self.send({'Capabilities': {'Power': {'Min': 0, 'Max': self.heater.get_power_max()}}})
await self.send({'Capabilities': {'Power': {'Min': 0, 'Max': self.device.get_power_max()}}})
self.heater.set_on_changed('is_active', ChangedInteger(self.on_changed_active).set)
self.heater.set_on_changed('power_eff', ChangedInteger(self.on_changed_power).set)
self.heater.activate(False)
self.device.set_on_changed('power_eff', ChangedInteger(self.on_changed_power).set)
pulse_period_s = 1
pulse_period_count = pulse_period_s/self.interval
while True:
if self.power_soll < self.heater.get_power_min():
self.heater.set_power(self.heater.get_power_min())
self.heater.activate(False)
else:
self.heater.set_power(self.power_soll)
self.heater.activate(True)
with self.device.open():
while True:
if self.power_soll < self.device.get_power_min():
self.device.set_power(self.device.get_power_min())
self.device.activate(False)
else:
self.device.set_power(self.power_soll)
self.device.activate(True)
on_count = pulse_period_count
if self.heater.get_power_min() > 0:
on_count = pulse_period_count*min(1, self.power_soll/self.heater.get_power_min())
on_count = pulse_period_count
if self.device.get_power_min() > 0:
on_count = pulse_period_count*min(1, self.power_soll / self.device.get_power_min())
self.pulse_counter += 1
if self.pulse_counter >= pulse_period_count:
self.pulse_counter = 0
self.pulse_counter += 1
if self.pulse_counter >= pulse_period_count:
self.pulse_counter = 0
if self.pulse_counter < on_count:
self.heater.activate(True)
else:
self.heater.activate(False)
if self.pulse_counter < on_count:
self.device.activate(True)
else:
self.device.activate(False)
self.heater.process()
await asyncio.sleep(self.interval)
self.device.process()
await asyncio.sleep(self.interval)
+4 -7
View File
@@ -21,9 +21,6 @@ class StirrerTask(ATask):
def on_cycletime_changed(self, value):
asyncio.create_task(self.send({'CycleTime': value}))
def on_changed_active(self, is_activated):
asyncio.create_task(self.send({'Activate': int(is_activated)}))
async def recv(self, data):
for pair in data.items():
if 'Speed' in pair[0]:
@@ -39,12 +36,12 @@ class StirrerTask(ATask):
self.device.set_on_changed("speed", self.on_speed_changed)
self.device.set_on_changed("dutyCycle", self.on_dutycycle_changed)
self.device.set_on_changed("cycleTime", self.on_cycletime_changed)
self.device.set_on_changed('is_active', ChangedInteger(self.on_changed_active).set)
self.device.set_speed(50.0)
self.device.set_cycle_time(10.0)
self.device.set_duty_cycle(1.0)
while True:
self.device.process()
await asyncio.sleep(self.interval)
with self.device.open():
while True:
self.device.process()
await asyncio.sleep(self.interval)