craftbeerpi4-pione/core/extension/dummylogic/__init__.py

87 lines
2 KiB
Python
Raw Normal View History

2018-11-18 15:40:10 +01:00
import asyncio
2018-11-29 21:59:08 +01:00
from core.api import Property, on_event
2018-11-18 15:40:10 +01:00
from core.api.kettle_logic import CBPiKettleLogic
class CustomLogic(CBPiKettleLogic):
2018-11-18 23:09:17 +01:00
test = Property.Number(label="Test")
2018-11-18 15:40:10 +01:00
running = True
2018-11-29 21:59:08 +01:00
2018-11-30 23:27:11 +01:00
async def wait_for_event(self, topic, callback=None, timeout=None):
2018-11-29 21:59:08 +01:00
future_obj = self.cbpi.app.loop.create_future()
2018-11-30 23:27:11 +01:00
async def default_callback(id, **kwargs):
future_obj.set_result("HELLO")
2018-11-29 21:59:08 +01:00
2018-11-30 23:27:11 +01:00
if callback is None:
self.cbpi.bus.register(topic=topic, method=default_callback)
else:
callback.future = future_obj
self.cbpi.bus.register(topic=topic, method=callback)
2018-11-29 21:59:08 +01:00
if timeout is not None:
try:
print("----> WAIT FOR FUTURE")
2018-11-30 23:27:11 +01:00
await asyncio.wait_for(future_obj, timeout=timeout)
print("------> TIMEOUT")
2018-11-29 21:59:08 +01:00
return future_obj.result()
except asyncio.TimeoutError:
print('timeout!')
else:
print("----> WAIT FOR FUTURE")
await future_obj
return future_obj.result()
2018-11-18 15:40:10 +01:00
async def run(self):
2018-11-30 23:27:11 +01:00
2018-12-03 22:16:03 +01:00
async def my_callback(value, **kwargs):
2018-11-30 23:27:11 +01:00
2018-12-03 22:16:03 +01:00
if value == 5:
self.cbpi.bus.unregister(my_callback)
kwargs["future"].set_result("AMAZING")
else:
print("OTHER VALUE", value)
result = await self.wait_for_event("sensor/1", callback=my_callback)
2018-11-29 21:59:08 +01:00
print("THE RESULT", result)
2018-11-18 15:40:10 +01:00
2018-11-29 21:59:08 +01:00
'''
while self.running:
2018-11-18 23:09:17 +01:00
print("RUN", self.test)
value = await self.cbpi.sensor.get_value(1)
print(value)
if value >= 10:
break
2018-11-18 15:40:10 +01:00
await asyncio.sleep(1)
2018-11-29 21:59:08 +01:00
'''
2018-12-03 22:16:03 +01:00
print("YES IM FINISHED STOP LOGIC")
2018-11-18 23:09:17 +01:00
2018-11-18 15:40:10 +01:00
def setup(cbpi):
'''
This method is called by the server during startup
Here you need to register your plugins at the server
:param cbpi: the cbpi core
:return:
'''
cbpi.plugin.register("CustomKettleLogic", CustomLogic)