THE ONE OF IoT,YOUR ONLY CHOICE!
How to Register a Infairy Device
 

Device


This chapter will lead you to register Infairy Cocina device object.
Fig-1-2-1:What is device

Infairy device object is a object which can interactive with others. Every bundle is a device.

package com.mycompany.App.myBundle;

import java.util.Dictionary;
import java.util.Hashtable;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import com.infairy.cocina.SDK.device.DevicePool;
import com.infairy.cocina.SDK.gene.InfairyInterface;
import com.infairy.cocina.SDK.property.Property;
import com.infairy.smarthome.tools.Tools;


public class myFirstBundle implements BundleActivator{

    /*
     * declare bundle context
     */
    BundleContext context;

    /*
     * declare device sdk
     */
    DevicePool device;

    /*
     * declare property sdk
     */
     Property property;
     
     
     Dictionary dict = new Hashtable();
     
     String BundleID="";
     

    /*
     * entry point
     */
    public void start(BundleContext context) throws Exception {
        this.context=context;

        /*
         * get property service
         */
        property=(Property)Tools.getService(context, Property.class.getName(), "(Property=Setting)");

        /*
         * get device service
         */
        device=(DevicePool)Tools.getService(context, DevicePool.class.getName(), property.getDeviceService());

        /**
         * Register bundle
         */
        Dictionary props = new Hashtable();
        props.put(InfairyInterface.BundleAlias, "MyInfairyBundle");
        boolean TF=device.registerBundle(context, this, props);

        /*
         * register device alias name which will show on all UI.
         */
        dict.put(InfairyInterface.DeviceAlias,"mybundle"); 
        /*
         * Define the device's global kind for device's used.
         */
        dict.put(InfairyInterface.DeviceGlobalKind, "mycompany"); 
        BundleID=device.addDevice(this, dict);

        
        
    }


    /*
     * exit bundle
     */
    public void stop(BundleContext context) throws Exception {
        device.stopInfairyBundle(context, this,  "", "");
    }


}
Now, the bundle was transform to a virtual device.
We can also defined the device's activity, ex:
    public void start(BundleContext context) throws Exception {

        ...

        /*
         * register device alias name which will show on all UI.
         */
        dict.put(InfairyInterface.DeviceAlias,"mybundle"); 
        /*
         * Define the device's global kind for device's used.
         */
        dict.put(InfairyInterface.DeviceGlobalKind, "mycompany"); 

        /*
         * Define the device command class
         */
        dict.put(InfairyInterface.DeviceCommandClass, new String[]{device.SOFTWARE_CMDCLASS_SWITCH_BINARY});


        BundleID=device.addDevice(this, dict);

        
        
    }

Now, your device was defined as a Binary Switch, So we also have to defined the function be let you device alive,
    public void start(BundleContext context) throws Exception {
        ...


        Vector Operation=new Vector();
        /*
         *  On operation mapping to DoOn function
         */
        Operation.addElement(new Object[]{device.DEVICE_OPERATION_ON, "DoON"});  
        /*
         *  Off operation mapping to DoOff function
         */

        Operation.addElement(new Object[]{device.DEVICE_OPERATION_OFF, "DoOff"}); 

        /*
         * Set the operation
         */
        dict.put(InfairyInterface.DeviceOperation, Operation); 

        ...

        BundleID=device.addDevice(this, dict);
    }

    /*
     * Defined the ON operation
     */
    public void DoOn(){
       ...
    }

    /*
     * Defined the OFF operation
     */
    public void DoOFF(){
        ....
    }