- added heater on/off modulation if heater is not capable of generating power minimum power
- set heaters minimum power to 500
This commit is contained in:
@@ -56,9 +56,11 @@ class HeaterTask(ATask):
|
|||||||
self.interval = interval
|
self.interval = interval
|
||||||
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.pulse_counter = 0
|
||||||
|
|
||||||
def actor(self, y):
|
def actor(self, y):
|
||||||
self.heater.setPower(max(0, 0 + self.heater.get_power_max() * y))
|
self.power_soll = max(0, 0 + self.heater.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)}))
|
||||||
@@ -70,7 +72,7 @@ class HeaterTask(ATask):
|
|||||||
print(data)
|
print(data)
|
||||||
for pair in data.items():
|
for pair in data.items():
|
||||||
if 'Power' in pair[0]:
|
if 'Power' in pair[0]:
|
||||||
self.heater.setPower(pair[1])
|
self.power_soll = pair[1]
|
||||||
if 'Activate' in pair[0]:
|
if 'Activate' in pair[0]:
|
||||||
self.heater.activate(bool(pair[1]))
|
self.heater.activate(bool(pair[1]))
|
||||||
|
|
||||||
@@ -79,13 +81,36 @@ class HeaterTask(ATask):
|
|||||||
|
|
||||||
async def on_process(self):
|
async def on_process(self):
|
||||||
print("{}: Started with interval {} s".format(self.msg_handler.get_key(), self.interval))
|
print("{}: Started with interval {} s".format(self.msg_handler.get_key(), self.interval))
|
||||||
await self.send({'Capabilities': {'Power': {'Min': self.heater.get_power_min(), 'Max': self.heater.get_power_max()}}})
|
await self.send({'Capabilities': {'Power': {'Min': 0, 'Max': self.heater.get_power_max()}}})
|
||||||
|
|
||||||
self.heater.set_on_changed('is_active', ChangedInteger(self.on_changed_active).set)
|
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.set_on_changed('power_eff', ChangedInteger(self.on_changed_power).set)
|
||||||
self.heater.activate(False)
|
self.heater.activate(False)
|
||||||
|
|
||||||
|
pulse_period_s = 1
|
||||||
|
pulse_period_count = pulse_period_s/self.interval
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
if self.power_soll < self.heater.get_power_min():
|
||||||
|
self.heater.setPower(self.heater.get_power_min())
|
||||||
|
self.heater.activate(False)
|
||||||
|
else:
|
||||||
|
self.heater.setPower(self.power_soll)
|
||||||
|
self.heater.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())
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
self.heater.process()
|
self.heater.process()
|
||||||
await asyncio.sleep(self.interval)
|
await asyncio.sleep(self.interval)
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class Heater(AHeater):
|
|||||||
self.power_eff = 0
|
self.power_eff = 0
|
||||||
|
|
||||||
def get_power_min(self):
|
def get_power_min(self):
|
||||||
return 0
|
return 500
|
||||||
|
|
||||||
def get_power_max(self):
|
def get_power_max(self):
|
||||||
return 3500
|
return 3500
|
||||||
|
|||||||
Reference in New Issue
Block a user