# energenie.py 24/05/2016 D.J.Whale # # Provides the app writer with a simple single module interface to everything. # At the moment, this just hides the fact that the radio module needs to be initialised # at the start and cleaned up at the end. # # Future versions of this *might* also start receive monitor or scheduler threads. import time try: # Python 3 from . import radio from . import Devices from . import Registry from . import OpenThings except ImportError: # Python 2 import radio import Devices import Registry import OpenThings registry = Registry.registry fsk_router = Registry.fsk_router def init(): """Start the Energenie system running""" radio.init() OpenThings.init(Devices.CRYPT_PID) def loop(receive_time=1): """Handle receive processing""" radio.receiver(fsk=True) timeout = time.time() + receive_time handled = False while True: if radio.is_receive_waiting(): payload = radio.receive_cbp() now = time.time() try: msg = OpenThings.decode(payload, receive_timestamp=now) hdr = msg["header"] mfr_id = hdr["mfrid"] product_id = hdr["productid"] device_id = hdr["sensorid"] address = (mfr_id, product_id, device_id) Registry.fsk_router.handle_message(address, payload) handled = True except OpenThings.OpenThingsException: print("Can't decode payload:%s" % payload) now = time.time() if now > timeout: break return handled def finished(): """Cleanly close the Energenie system when finished""" radio.finished() # END