Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. A single component cannot control multiple physical devices. The component must control a unique physical device, so it must have a "device_id" characteristic, instead of passing it as a parameter.
  2. The "api_region", "api_key", and "api_secret" parameters must also be characteristics of the component, since they are static data as well.
  3. Actions "turnOn" and "turnOff" will be implemented asynchronously for simplicity. In another section we will implement a asynchronous component.

...

BACI smart bulb component template

Code Block
languageyml
titletuya_bulb_baci.yml
linenumberstrue
working_dir: /home/francisco/workspace
prefix: ACSIOT
module: acsiot
component_name: TuyaBulbBaci
functions:
  - 'void turnOn(in string api_region, in string api_key, in string api_secret)'
  - 'void turnOff(in string api_region, in string api_key, in string api_secret)'
  - 'ACS::ROboolean getStatus()'
  - 'readonly attribute ACS::ROboolean status'

...

BACI

...

smart bulb

...

component implementation

Code Block
languagecpp
titleidlTuyaBulbBaci/idl/TuyaBulbBaci.idl
linenumberstrue
#ifndef _TUYABULBBACI_IDL_
#define _TUYABULBBACI_IDL_
 
#pragma prefix "ACSIOT"
 
#include <baci.idl>
 
module acsiot {
    interface TuyaBulbBaci : ACS::CharacteristicComponent {
        void turnOn(in string api_region, in string api_key, in string api_secret);
        void turnOff(in string api_region, in string api_key, in string api_secret);
        readonly attribute ACS::ROboolean status;
    };
};

#endif


Component

Code Block
languagecpp
titleTuyaBulbBaciImpl.h
#ifndef _TUYABULBBACI_IMPL_H
#define _TUYABULBBACI_IMPL_H
  
#ifndef __cplusplus
#error This is a C++ include file and cannot be used from plain C
#endif
  
//Base component implementation, including container services and component lifecycle infrastructure
#include <acscomponentImpl.h>
  
//Skeleton interface for server implementation
#include <TuyaBulbBaciS.h>
  
//Error definitions for catching and raising exceptions
class TuyaBulbBaciImpl : public virtual acscomponent::ACSComponentImpl, public virtual POA_acsiot::TuyaBulbBaci {
    public:
        TuyaBulbBaciImpl(const ACE_CString& name, maci::ContainerServices * containerServices);
        virtual ~TuyaBulbBaciImpl();

        void turnOn(char* api_region, char* api_key, char* api_secret);
        void turnOff(char* api_region, char* api_key, char* api_secret);

    private:
        ACS::ROboolean* status;
};
  
#endif
Code Block
languagecpp
titleTuyaBulbBaciImpl.cpp
#include <TuyaBulbBaciImpl.h>

#include <stdexcept>
  
TuyaBulbBaciImpl::TuyaBulbBaciImpl(const ACE_CString& name, maci::ContainerServices * containerServices) : ACSComponentImpl(name, containerServices) {
}
  
TuyaBulbBaciImpl::~TuyaBulbBaciImpl() {
}

// functions
void TuyaBulbBaciImpl::turnOn(char* api_region, char* api_key, char* api_secret) {
    throw CORBA::NO_IMPLEMENT();
}

void TuyaBulbBaciImpl::turnOff(char* api_region, char* api_key, char* api_secret) {
    throw CORBA::NO_IMPLEMENT();
}

// properties
ACS::ROboolean* status;
  
/* --------------- [ MACI DLL support functions ] -----------------*/
#include <maciACSComponentDefines.h>
MACI_DLL_SUPPORT_FUNCTIONS(TuyaBulbBaciImpl)
/* ----------------------------------------------------------------*/