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