--- alias: user-guide-creating-extendable-controllers tags: - automation - controller - inheritance - connect iot description: "This documentation guides users through creating and extending controllers with inheritance management" --- # Creating Extendable Controllers This section covers how to create new extendable controllers using different approaches and configurations. ## Basic Flow To create a controller that inherits from an existing controller: 1. Go to [[user-guide-automation-controller-page]] 2. Click the **New** button 3. Fill the General Data information and select the **Parent Automation Controller** and press **Next** - Choose from available controller revisions of the same scope (Connect IoT) - You can change or remove the parent selection during creation ![New Extendable Controller Wizard: General Data Step](./images/new-step1-general-data-tab.png) 4. Check **Driver Configuration** and press **Next** - All drivers from the parent controller are displayed - Parent drivers cannot be modified or removed - You are allowed to add new ones ![New Extendable Controller Wizard: Parent Drivers](./images/new-step2-driver-parent.png) 5. Check the inherited tasks selection and add new if required and press **Create** - Tasks and versions from the parent are automatically selected - You cannot unselect or change parent controller tasks - You are allowed to select additional task libraries if needed ![New Extendable Controller Wizard: Parent Tasks](./images/new-automtion-manager-with-parent-automation-controller-step3.png) 6. Workflow editor is presented and you are allowed to change it: - All parent workflows are inherited as virtual workflows and marked with a diamond symbol (◇ on its name) - Inherited workflows cannot be modified directly (are read-only), until they are overridden. - You are allowed to add new workflows. ![New Extendable Controller Workflow: Inherited](./images/new-child-workflow-no-edit.png) 7. Save, approve **Controller** changes and make it effective, so it can be used or extended. ## Extend Controller Drivers To create a controller that extends a parent and adds new driver connections: 1. Follow Basic Creation flow ([above](#basic-flow)) or edit an extended workflow. 2. During wizard execution, on the **Driver Definitions** step add the new drivers: - After selecting the parent, you can add additional driver connections - New driver names must be unique (different from parent driver names) - Each new driver will automatically create a setup workflow ![New Extendable Controller Wizard: New Child Drivers](./images/new-step2-driver-child.png) 3. Additional **Tasks** Activation will be allowed for the new added drivers - Tasks that depend on new protocols are automatically activated ![New Extendable Controller Wizard: Additional Tasks Selection (SecsGem)](./images/new-step3-tasks-selection-withNewDriver.png) 4. Workflow editor is presented with parent driver workflows and new child drivers workflows. - All parent workflows are inherited as virtual workflows and marked with a diamond symbol (◇ on its name) - Inherited workflows cannot be modified directly (are read-only), until they are overridden. - A new setup workflow is created for each new driver - Setup workflow names must be unique across all workflows (including inherited ones) ![New Extendable Controller Workflow: Extended](./images/new-child-workflow-with-additional-driver.png) 5. Save, approve **Controller** changes and make it effective, so it can be used or extended. ## Multi-Level Inheritance Controllers can inherit from other controllers that already have parents: 1. Follow Basic Creation flow ([above](#basic-flow)) or edit an extended workflow. 2. Select Extended Parent Controller that already extends another controller - The system will show drivers and workflows from the entire inheritance chain 3. Adapt your new controller drivers, tasks and workflows according to needs 4. Save, approve **Controller** changes and make it effective, so it can be used or extended. The resulting workflow follows the Inheritance Aggregation rules below: - The new controller inherits from all controllers in the chain. - All drivers from parent controllers appear as virtual. - All workflows from parent controllers are inherited. - Task versions remain compatible across the entire chain.