একটি অটোমেশন তৈরিতে বিভিন্ন অটোমেশন DSL নোড কীভাবে ব্যবহার করা যেতে পারে তা বুঝতে নিম্নলিখিত নির্দেশিকাটি ব্যবহার করুন।
 সমস্ত অটোমেশন DSL একটি একক automation নোডের মধ্যে স্থাপন করা হয়। automation নোডটি বাইরের কোটলিন ভাষা প্রসঙ্গ এবং এমবেডেড DSL প্রসঙ্গ এর মধ্যে সীমানা তৈরি করে।
ক্রমিক প্রবাহ
সিকুয়েন্সিয়াল ফ্লো হলো ডিফল্ট ধরণের অটোমেশন ফ্লো।
এখানে একটি খুবই মৌলিক অটোমেশন DSL টেমপ্লেট রয়েছে যা একটি স্টার্টার, একটি শর্ত এবং একটি ক্রিয়া সমন্বিত একটি ক্রমিক প্রবাহ ব্যবহার করে:
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.condition
import com.google.home.automation.sequential
import com.google.home.automation.starter
...
automation {
  sequential {
    starter<_>(...)
    condition {...}
    action {...}
  }
}
অতিরিক্ত নোড যোগ করে এটি পরিমার্জিত করা যেতে পারে।
স্টার্টার
 স্টার্টার নোডগুলি প্রাথমিক পরিস্থিতিগুলিকে সংজ্ঞায়িত করে যা একটি অটোমেশন সক্রিয় করে। উদাহরণস্বরূপ, অবস্থা বা মানের পরিবর্তন। একটি অটোমেশনে কমপক্ষে একটি স্টার্টার থাকতে হবে, অন্যথায় এটি যাচাইকরণ ব্যর্থ হবে। একটি অটোমেশনে একাধিক স্টার্টার যোগ করার জন্য, আপনাকে অবশ্যই একটি select নোড ব্যবহার করতে হবে।
বৈশিষ্ট্য বৈশিষ্ট্যের উপর ভিত্তি করে স্টার্টার
একটি trait অ্যাট্রিবিউটের উপর ভিত্তি করে একটি স্টার্টার নোড ঘোষণা করার সময়, উল্লেখ করুন:
- যন্ত্রটি
- বৈশিষ্ট্যটি যে ধরণের ডিভাইসের সাথে সম্পর্কিত
- বৈশিষ্ট্যটি
starter<_>(thermostat, TemperatureSensorDevice, TemperatureMeasurement)
 ডিভাইস টাইপ প্যারামিটারটি প্রয়োজনীয় কারণ এটি আপনাকে একটি ডিভাইসের মধ্যে কোন ডিভাইসের ধরণটি অটোমেশন ঠিকানাগুলি নির্দিষ্ট করতে দেয়। উদাহরণস্বরূপ, একটি ডিভাইস একটি FanDevice এবং একটি HeatingCoolingUnitDevice দিয়ে গঠিত হতে পারে, যার উভয়টিতেই OnOff বৈশিষ্ট্য রয়েছে। ডিভাইসের ধরণ নির্দিষ্ট করে, ডিভাইসের কোন অংশটি অটোমেশন ট্রিগার করে তা নিয়ে কোনও অস্পষ্টতা থাকে না।
ইভেন্টের উপর ভিত্তি করে শুরু
কোনও ইভেন্টের উপর ভিত্তি করে স্টার্টার নোড ঘোষণা করার সময়, উল্লেখ করুন:
- যন্ত্রটি
- বৈশিষ্ট্যটি যে ধরণের ডিভাইসের সাথে সম্পর্কিত
- ঘটনাটি
starter<_>(doorBell, GoogleDoorbellDevice, DoorbellPressed)
প্যারামিটার সহ একটি কাঠামো এবং ইভেন্টের উপর ভিত্তি করে স্টার্টার
কিছু ইভেন্টের প্যারামিটার থাকতে পারে, তাই এই প্যারামিটারগুলিও স্টার্টারে অন্তর্ভুক্ত করা প্রয়োজন।
 উদাহরণস্বরূপ, এই স্টার্টারটি সকাল ৭:০০ টায় অটোমেশন সক্রিয় করতে Time বৈশিষ্ট্যের ScheduledTimeEvent ব্যবহার করে:
val earlyMorning = starter<_>(structure, Time.ScheduledTimeEvent) {
  parameter(Time.ScheduledTimeEvent.clockTime(
    LocalTime.of(7, 0, 0, 0)))
}
ম্যানুয়াল স্টার্টার
ম্যানুয়াল স্টার্টার হল একটি বিশেষ ধরণের স্টার্টার যা ব্যবহারকারীকে ম্যানুয়ালি অটোমেশন চালাতে দেয়।
ম্যানুয়াল স্টার্টার ঘোষণা করার সময়:
- কোনও বৈশিষ্ট্য বা ডিভাইসের ধরণ নির্দিষ্ট করবেন না।
-  Automation.execute()কল করে এমন একটি UI উপাদান প্রদান করুন।
 একটি select ফ্লোতে অন্য একটি স্টার্টারের সাথে একটি ম্যানুয়াল স্টার্টার স্থাপন করার সময়, ম্যানুয়াল স্টার্টারটি অন্য স্টার্টারটিকে ওভাররাইড করে:
select {
  manualStarter()
  starter<_>(thermostat, TemperatureSensorDevice, TemperatureMeasurement)
}
 মনে রাখবেন যে ম্যানুয়াল স্টার্টারের পরে যেকোনো condition নোড মূল্যায়ন করা হবে এবং condition এক্সপ্রেশনের উপর নির্ভর করে অটোমেশনের কার্যকরকরণকে ব্লক করতে পারে। 
 ম্যানুয়াল স্টার্টার দিয়ে সক্রিয় করা কোনও অটোমেশন যাতে condition নোড ব্লক না করে, তার জন্য অটোমেশন গঠনের একটি উপায় হল অন্য স্টার্টারটিকে তার condition সাথে একটি পৃথক ক্রমিক প্রবাহে রাখা:
automation_graph {
  sequential {
    select {
      sequential {
        starter<_>(...)
        condition {...}
      }
      sequential {
        manualStarter()
      }
    }
    action {...}
  }
}
একটি বৈশিষ্ট্যের মান উল্লেখ করুন
একটি এক্সপ্রেশনে একটি অ্যাট্রিবিউটের মান ব্যবহার করতে, নিম্নলিখিত সিনট্যাক্সটি ব্যবহার করুন।
 একটি stateReader সহ:
val time = stateReader<_>(structure, Structure, Time)
val currTime = time.currentTime
 starter সহ:
val starterNode = starter<_>(device1, LaundryWasherDevice, OnOff)
condition() {
  expression = starterNode.onOff equals true
}
কন্ডিশন নোড এবং এক্সপ্রেশন
 একটি কন্ডিশন নোড একটি সিদ্ধান্ত বিন্দু প্রতিনিধিত্ব করে যা নির্ধারণ করে যে অটোমেশন অব্যাহত থাকবে কিনা। একটি অটোমেশনে একাধিক condition নোড থাকতে পারে। যদি কোনও condition নোডের এক্সপ্রেশনটি false হিসাবে মূল্যায়ন করে, তাহলে সম্পূর্ণ অটোমেশনের সম্পাদন শেষ হয়ে যায়।
 একটি condition নোডের মধ্যে, আপনি বিভিন্ন অপারেটর ব্যবহার করে একাধিক কন্ডিশন ক্রাইটেরিয়া একত্রিত করতে পারেন, যতক্ষণ না এক্সপ্রেশনটি একটি একক বুলিয়ান মানের মূল্যায়ন করে। যদি ফলাফলের মান true হয়, তাহলে শর্তটি পূরণ হয় এবং অটোমেশন পরবর্তী নোডের এক্সিকিউশন অব্যাহত রাখে। যদি এটি false , তাহলে অটোমেশন সেই সময়ে এক্সিকিউশন বন্ধ করে দেয়।
Kotlin-এর এক্সপ্রেশনের মতোই এক্সপ্রেশন তৈরি হয় এবং এতে সংখ্যা, অক্ষর, স্ট্রিং এবং বুলিয়ানের মতো আদিম মান থাকতে পারে, সেইসাথে Enum মানও থাকতে পারে। সাব এক্সপ্রেশনগুলিকে বন্ধনী দিয়ে গ্রুপ করার মাধ্যমে আপনি তাদের মূল্যায়নের ক্রম নিয়ন্ত্রণ করতে পারবেন।
 এখানে এমন একটি condition উদাহরণ দেওয়া হল যা একাধিক উপ-অভিব্যক্তিকে একটি একক অভিব্যক্তিতে একত্রিত করে:
condition() {
  val expr1 = starterNode.lockState equals DlLockState.Unlocked
  val expr2 = stateReaderNode.lockState equals true
  val expr3 = occupancySensingDevice.occupied notEquals 0
  val expr4 = timeStateReaderNode
    .currentTime
    .between(
      timeStateReaderNode.sunsetTime,
      timeStateReaderNode.sunriseTime)
  expression = (expr1 and expr2) or (expr3 and expr4)
}
আপনি একটি স্টার্টারের মাধ্যমে অ্যাক্সেস করা একটি বৈশিষ্ট্যের মান উল্লেখ করতে পারেন:
val starterNode = starter<_>(device, OnOff)
condition() { expression = starterNode.onOff equals true }
স্টেটরিডার
 condition নোডে trait অ্যাট্রিবিউটের মান উল্লেখ করার আরেকটি উপায় হল stateReader নোড।
 এটি করার জন্য, প্রথমে একটি stateReader নোডে trait attribute মান ক্যাপচার করুন। একটি stateReader structure এবং trait কে আর্গুমেন্ট হিসেবে নেয়: 
import com.google.home.automation.stateReader
...
val filterMonitoringState = stateReader<_>(structure, ActivatedCarbonFilterMonitoring)
তারপর condition নোডে stateReader রেফারেন্স করুন: 
condition() {
  expression =
    filterMonitoringState.changeIndication
      .equals(ChangeIndicationEnum.Warning)
}
তুলনা এবং লজিক্যাল অপারেটর ব্যবহার করে, একটি condition নোডে একাধিক stateReaders ব্যবহার করা যেতে পারে: 
val armState = stateReader<_>(doorLock, DoorLockDevice, ArmDisarm )
val doorLockState = stateReader<_>(doorLock, DoorLockDevice, DoorLock)
condition() {
  expression =
    (armState.armState equals true)
    and
    (doorLockState.lockState equals true)
}
শর্তের সময়কাল
একটি কন্ডিশনে বুলিয়ান এক্সপ্রেশন ছাড়াও, আপনি একটি সময়সীমা নির্দিষ্ট করতে পারেন যার মধ্যে অটোমেশন চালানোর জন্য এক্সপ্রেশনটি সত্য হতে হবে। উদাহরণস্বরূপ, আপনি এমন একটি শর্ত সংজ্ঞায়িত করতে পারেন যা কেবল দশ মিনিট ধরে আলো জ্বললেই জ্বলবে।
  condition {
    expression(lightStateReader.onOff == true)
    forDuration(Duration.ofMinutes(10))
  }
সময়কাল এক থেকে ৩০ মিনিট পর্যন্ত হতে পারে।
অ্যাকশন নোড
 অ্যাকশন নোড হল সেই জায়গা যেখানে অটোমেশনের কাজটি সম্পন্ন হয়। এই উদাহরণে, অ্যাকশনটি AssistantBroadcast বৈশিষ্ট্যের broadcast() কমান্ডটি ব্যবহার করে: 
action(device, SpeakerDevice) {
  command(AssistantBroadcast.broadcast("Intruder detected!"))
}
ইম্পোর্ট স্টেটমেন্ট
অটোমেশন তৈরি করার সময়, হোম এপিআই-এর বিভিন্ন উপাদান কীভাবে আপনার কোডে আমদানি করবেন তা সবসময় স্পষ্ট নয়।
 Trait বৈশিষ্ট্যগুলি trait এর Companion অবজেক্ট থেকে আমদানি করা হয়: 
import com.google.home.matter.standard.OnOff.Companion.onOff
একটি বৈশিষ্ট্য দ্বারা সংজ্ঞায়িত ডেটা স্ট্রাকচারগুলি সেই বৈশিষ্ট্য শ্রেণী থেকে আমদানি করা হয় যার নাম "-Trait" দিয়ে শেষ হয়:
import com.google.home.matter.standard.MediaPlaybackTrait.PlaybackStateEnum
Trait কমান্ডগুলি trait এর Companion অবজেক্ট থেকে আমদানি করা হয়: 
import com.google.home.matter.standard.Thermostat.Companion.setTemperatureSetpointHold