Versions Compared

Key

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

...

The component generation tool uses a template in YML to create the component's IDL and implementation.

Code Block
languagecppyml
titletuya_bulb.yml
linenumberstrue
working_dir: ~/home/developer/workspace
prefix: ACSIOT
module: acsiot
component_name: TuyaBulb
functions:
  - 'void turnOn(in string api_region, in string api_key, in string api_secret, in string device_id)'
  - 'void turnOff(in string api_region, in string api_key, in string api_secret, in string device_id)'

...

Code Block
languagepy
titlepyTuyaBulb/src/acsiotImpl/TuyaBulbImpl.py
linenumberstrue
# Client stubs and definitions, such as structs, enums, etc.
import acsiot
# Skeleton infrastructure for server implementation
import acsiot__POA
   
# Base component implementation
from Acspy.Servants.ACSComponent import ACSComponent
# Services provided by the container to the component
from Acspy.Servants.ContainerServices import ContainerServices
# Basic component lifecycle (initialize, execute, cleanUp and aboutToAbort methods)
from Acspy.Servants.ComponentLifecycle import ComponentLifecycle

import tinytuya
tinytuya.set_debug(True)


class TuyaBulbImpl(acsiot__POA.TuyaBulb, ACSComponent, ContainerServices, ComponentLifecycle):
    def __init__(self):
        ACSComponent.__init__(self)
        ContainerServices.__init__(self)
        self._logger = self.getLogger()
        
    def turnOn(self, api_region, api_key, api_secret, device_id):
        # raise NotImplementedError("This function should do something")
        client = tinytuya.Cloud(
            apiRegion=api_region,
            apiKey=api_key,
            apiSecret=api_secret
        )

        commands = {
            'commands': [{
                'code': 'switch_led',
                'value': True
            }]
        }
        print("SendingTurning commandon...")
        result = client.sendcommand(device_id, commands)
        print("Results\n:", result)

    def turnOff(self, api_region, api_key, api_secret, device_id):
        # raise NotImplementedError("This function should do something")
        client = tinytuya.Cloud(
            apiRegion=api_region,
            apiKey=api_key,
            apiSecret=api_secret
        )

        commands = {
            'commands': [{
                'code': 'switch_led',
                'value': False
            }]
        }
        print("SendingTurning commandoff...")
        result = client.sendcommand(device_id, commands)
        print("Results\n:", result)

...

  1. In one terminal run:

    Code Block
    languagebash
    acsStop
    acsStart
  2. In a second terminal run:

    Code Block
    languagebash
    acsStartContainer -py aragornContainer
  3. And in a third terminal run:

    Code Block
    languagebash
    from Acspy.Clients.SimpleClient import PySimpleClient
      
    
    api_region = 'my_regionus'
    api_key = 'my_api_key'
    api_secret = 'my_api_secret'
    device_id = 'my_device_id'
    
    client = PySimpleClient()
    
    bulb = client.getComponent("TuyaBulbPython")
    bulb.turnOn(api_region, api_key, api_secret, device_id)
    bulb.turnOff(api_region, api_key, api_secret, device_id)
  4. If everything is ok you should have witnessed how the smart bulb lit on and off using ACS.