Creating an IzoT Python Application
The following example Python 3 code defines an interface for an IzoT device, initializes the ISI engine with the appropriate values, and then starts that device application. The device in this example will automatically enroll itself. If a Lamp Controller device is later added to the network, this will handle the connections of the datapoints, such that changing the value on the Keypad will update the light level on the Keypad device, and also on the connected Lamp Controller device. More details are available in the subsequent sections. This example code is a subset of the full keypad.py example that is found in the examples keypad section. This smaller example only connects the lights to a Lamp Controller; the full example also connects a temperature and a humidity sensor to an Environment Sensor device.
from izot.examples.common.framework.framework import Framework from izot.examples.common.framework.framework import FrameworkMenu from izot.examples.common.framework.framework import ApplicationType import izot.device from izot.resources.profiles.iotKeypad import iotKeypad from izot.resources.profiles.iotAnalogOutput import iotAnalogOutput PROGRAM_ID = '9F:FF:FF:05:00:70:00:01' # Program Id for Keypad application APP_NAME = 'keypad_example' APP_DESCRIPTION = 'The IzoT Keypad example application' APP_TYPE = ApplicationType.KEYPAD def main (): global app global keypad global lux framework = Framework (APP_NAME, APP_TYPE, APP_DESCRIPTION, PROGRAM_ID) app = framework.app # Get the app object from the framework keypad = app.block (profile = iotKeypad()) lux = app.block (profile = iotAnalogOutput()) # # For automatic ISI connections # - the keypad is an ISI host for the 'Light Level' function # - the keypad is an ISI client for the 'Keypad' function def on_user_interface(sender, argument): framework.isi.state = argument.event_code # Update the isi engine 'state' in the framework if argument.event_code == izot.device.isi.IsiEvent.WARM: auto_enrollment_start() # Event handler registration app.isi.OnUserInterface += on_user_interface def on_enrollment (sender, argument): """ Checks whether incoming enrollment invitation is acceptable """ if argument.enrollment.type_id == lux_assembly.enrollment.type_id: argument.result = lux_assembly elif argument.enrollment.type_id == keypad_assembly.enrollment.type_id: argument.result = keypad_assembly # Event handler registration app.isi.OnEnrollment += on_enrollment # ISI Assembly objects global lux_assembly global keypad_assembly keypad_assembly = izot.device.isi.Assembly( assembly = (keypad.nvoLoadControl, keypad.nviLoadStatus), enrollment = izot.device.isi.Enrollment ( direction = izot.device.isi.IsiDirection.VARIOUS, type_id = keypad.nvoLoadControl)) lux_assembly = izot.device.isi.Assembly ( assembly = lux.nviAnalog, enrollment = izot.device.isi.Enrollment ( direction = izot.device.isi.IsiDirection.INPUT, type_id = lux.nviAnalog)) framework.assembly1 = keypad_assembly framework.assembly2 = lux_assembly # Configure, and start, the IzoT application framework.app_start () # Add the standard console menu framework_menu = FrameworkMenu(framework) # Run the application try: done = False while not done: app.service(0.100) # Allow the IzoT stack time to service its events # Test for user input if kbhit(0.0): done = framework_menu.execute() finally: app.stop () # Stop the IzoT applicationtext