Ezlopi v2.x: Custom device/sensor integration guide

Prerequisite: Idea of cJSON is required before starting

Step-1: Create a respective folder in devices folder (eg. digital_io)

Step-2: Create a src file which contains the sensor/device script (eg. digital_io.c)

Step-3: Create a header file to declare the public function (eg. digital_io.h)

Step-4: Create CMakeLists.txt to link the required modules (eg. please see devices/digital_io/CMakeLists.txt for reference)

Step-5: Define the primary function for the device/sensor

eg. please follow the digital_io

int digital_io(e_ezlopi_actions_t action,
s_ezlopi_device_properties_t *properties, void *arg)

@details This function will be called whenever any event occurs (event such as EZLOPI_ACTION_PREPARE or EZLOPI_ACTION_INITIALIZE or EZLOPI_ACTION_NOTIFY_1000_MS or EZLOPI_ACTION_GET_EZLOPI_VALUE, etc.)

@arg action respective action will be fed when called this function

@arg properties the cloud and interface properties of sensor/device

@arg arg pointer of any specific data required to fed (eg. cJSON packed of request on hub.items.value.set)

@return int 0 if function execution were not success, 1 when function execution was a success, or return device properties type casted to int on ‘EZLOPI_ACTION_PREPARE’.

Use switch-case to implement the different event/action as in digital_io

Essential Actions:

EZLOPI_ACTION_PREPARE: This action stores the required properties for the particular device/sensor in a structure

EZLOPI_ACTION_INITIALIZE: Initialize the device/sensor’s interface or GPIO pins

EZLOPI_ACTION_GET_EZLOPI_VALUE: add the value parts of cjson as in digital_io example. This event will be executed whenever the value needs to send to the cloud.

EZLOPI_ACTION_NOTIFY_1000_MS: timer event. This event should be implemented if the device/sensor needs to sample the data each seconds. Similarly EZLOPI_ACTION_NOTIFY_500_MS for 500 ms, EZLOPI_ACTION_NOTIFY_100_MS for 100 ms and so on. For other than listed interval, user needs to implement themselves.

Similarly other events can be implemented.

Step-6: Put the device/sensor primary function on the device_array Eg. Please look at ezlopi-core/ezlopi_devices_list.c

#ifdef EZLOPI_DEVICE_0001_LED
		{
		.id = EZLOPI_DEVICE_0001_LED,
		.func = digital_io,
		},
		#endif

Define the macro for a particular device from the reference of the ezlogic app.

Step-7: Make sure the particular device is implemented on the ezlogic app.