অ্যান্ড্রয়েড ডিএসএল ধারণা

এটি অ্যান্ড্রয়েডের অটোমেশন ডিএসএল-এর মৌলিক ধারণাগুলোর একটি সংক্ষিপ্ত বিবরণ।

অটোমেশন উপাদান

একটি অটোমেশন নিম্নলিখিত মৌলিক উপাদানগুলো নিয়ে গঠিত, যেগুলো সাধারণত এই ক্রমে মূল্যায়ন করা হয়:

  1. স্টার্টার — অটোমেশন সক্রিয় করার প্রাথমিক শর্তাবলী নির্ধারণ করে, যেমন কোনো ট্রেইটের পরিবর্তন। একটি অটোমেশনের অবশ্যই একটি স্টার্টার থাকতে হবে।
  2. শর্ত — একটি অটোমেশন সক্রিয় হওয়ার পরে মূল্যায়ন করার জন্য যেকোনো অতিরিক্ত সীমাবদ্ধতা। একটি অটোমেশনের কার্যক্রম এগিয়ে যাওয়ার জন্য, শর্তের ভেতরের এক্সপ্রেশনটিকে অবশ্যই true বলে প্রমাণিত হতে হবে।
  3. ক্রিয়া — সকল শর্ত পূরণ হলে সম্পাদিত হওয়া নির্দেশ বা অবস্থার হালনাগাদ।

উদাহরণস্বরূপ, ধরুন আপনার এমন একটি অটোমেশন আছে যা সূর্যাস্ত থেকে সূর্যোদয়ের মধ্যবর্তী সময়ে কোনো ঘরের টিভি চালু করা হলে সেই ঘরের আলো কমিয়ে দেয়। এই উদাহরণে:

  1. স্টার্টার — টিভিটি চালু করা হয়েছিল, যা টিভির বৈশিষ্ট্যের একটি অবস্থার পরিবর্তন।
  2. অবস্থা — টিভিটি যে বাড়িতে রয়েছে, সেখানকার বর্তমান সময় মূল্যায়ন করা হয়।
  3. ক্রিয়া — টিভির সাথে একই ঘরের আলো ম্লান করে দেওয়া হয়।

ঘরের টিভি চালু করা হলে অটোমেশনটি সক্রিয় হবে, কিন্তু এটি কেবল তখনই কার্যকর হবে যখন "সময় সূর্যাস্ত এবং সূর্যোদয়ের মধ্যবর্তী" শর্তটি পূরণ হবে।

মৌলিক কাঠামোর পাশাপাশি, হোম এপিআই-এর অটোমেশনগুলিতে নাম এবং বিবরণের মতো মেটাডেটাও থাকে, যা ডেভেলপার এবং ব্যবহারকারীদের দ্বারা সেগুলিকে শনাক্ত করতে ব্যবহার করা যেতে পারে।

নোড

হোম এপিআই-গুলোতে, একটি অটোমেশনের যৌক্তিক কাঠামো নোড দ্বারা গঠিত। নোড হলো বিমূর্ত, পুনঃব্যবহারযোগ্য একক যা এনটিটির আচরণ বা কার্যসম্পাদন প্রবাহকে উপস্থাপন করে। প্রতিটি নোডের ইনপুট ভেরিয়েবল থাকতে পারে, সেইসাথে আউটপুট ভেরিয়েবলও থাকতে পারে যা অন্যান্য নোড দ্বারা ব্যবহৃত হতে পারে।

সারণি: অটোমেশন নোডের প্রকারভেদ
নোড নোড টাইপ কোটলিন বাস্তবায়ন বর্ণনা
স্টার্টার আচরণগত StarterNodeDsl যখন কোনো ট্রেইটের (যেকোনো অ্যাট্রিবিউটের) অবস্থা পরিবর্তিত হয়, তখন একটি অটোমেশন চালু হয়।
স্টেটরিডার আচরণগত StateReaderNodeDsl একটি ট্রেইট অ্যাট্রিবিউট পড়ে এবং কন্ডিশন নোডে ব্যবহারের জন্য এর মান ধারণ করতে দেয়।
পদক্ষেপ আচরণগত ActionNodeDsl ট্রেইট কমান্ড(গুলি) আহ্বান করে।
ক্রমিক কার্য সম্পাদন প্রবাহ SequentialFlow নেস্টেড অ্যাকশন নোডগুলো ক্রমানুসারে সম্পাদন করে। এটিই ডিফল্ট সম্পাদন আচরণ।
সমান্তরাল কার্য সম্পাদন প্রবাহ ParallelFlow নেস্টেড অ্যাকশন নোডগুলোকে সমান্তরালভাবে সম্পাদন করে।
অবস্থা কার্য সম্পাদন প্রবাহ ConditionNodeDsl লজিক্যাল এক্সপ্রেশনের মূল্যায়নের উপর ভিত্তি করে শর্তসাপেক্ষে এক্সিকিউশন ফ্লো পরিবর্তন করুন। শর্তগুলো কোনো একটি স্টার্টারের সাথে যুক্ত থাকতে পারে (স্টার্টার-নির্দিষ্ট শর্ত) অথবা গ্লোবাল হতে পারে (সকল স্টার্টারের জন্য প্রযোজ্য)।
নির্বাচন করুন কার্য সম্পাদন প্রবাহ SelectFlow একাধিক কর্মীকে একটি অটোমেশন সক্রিয় করার অনুমতি দেয়।
অভিব্যক্তি মূল্য Expression এটি কোনো ট্রেইটের অ্যাট্রিবিউটের মান, একটি ধ্রুবক বা একটি আক্ষরিক মান হতে পারে এবং এর মান অবশ্যই একটি তালিকা, সংখ্যা, বুলিয়ান বা স্ট্রিং হতে হবে।

আচরণগত নোড

স্টার্টার এবং অ্যাকশনের মতো নোডগুলো হলো আচরণগত নোড। স্টার্টারগুলো ডিভাইসের অ্যাট্রিবিউটের পরিবর্তনের উপর ভিত্তি করে একটি অটোমেশন সক্রিয় করে। অ্যাকশনগুলো ডিভাইসের কমান্ড জারি করে বা অ্যাট্রিবিউট আপডেট করে।

আচরণগত নোডগুলো সাধারণত ডিভাইসের বৈশিষ্ট্য এবং আউটপুট বৈশিষ্ট্যের অবস্থার সাথে সংযুক্ত থাকে, যা অন্যান্য নোডে ইনপুট হিসেবে ব্যবহৃত হয়।

এক্সিকিউশন ফ্লো নোড

কিছু নোড কার্য সম্পাদনের প্রবাহকে নির্দেশ করে, যেমন অনুক্রমিক এবং সমান্তরাল। এই নোডগুলোর প্রতিটিতে আচরণগত নোড থাকে, যা অটোমেশনকে সংজ্ঞায়িত করে।

উদাহরণস্বরূপ, একটি অনুক্রমিক প্রবাহে এমন নোড থাকতে পারে যা ক্রমানুসারে সম্পাদিত হয়। সাধারণত, এগুলো হলো স্টার্টার, কন্ডিশন এবং অ্যাকশন।

ক্রমিক নির্বাহ প্রবাহ
চিত্র ১: পর্যায়ক্রমিক স্বয়ংক্রিয়করণ প্রবাহ

একটি প্যারালাল ফ্লো-তে একাধিক অ্যাকশন নোড একই সময়ে কার্যকর হতে পারে, যেমন একই সাথে একাধিক বাতি জ্বালানো। প্যারালাল ফ্লো-র সমস্ত শাখা শেষ না হওয়া পর্যন্ত এর পরবর্তী নোডগুলো কার্যকর হবে না।

সমান্তরাল নির্বাহ প্রবাহ
চিত্র ২: সমান্তরাল স্বয়ংক্রিয়করণ প্রবাহ

আরেক ধরনের এক্সিকিউশন ফ্লো হলো কন্ডিশন ফ্লো , যা কোনো এক্সপ্রেশনের ইভ্যালুয়েশনের ওপর ভিত্তি করে এক্সিকিউশন ফ্লো পরিবর্তন করতে পারে।

উদাহরণস্বরূপ, ধরুন আপনার এমন একটি অটোমেশন আছে যা রাত কিনা তার উপর ভিত্তি করে কোনো একটি কাজ সম্পাদন করে। একটি কন্ডিশন নোড দিনের সময় পরীক্ষা করে, এবং তারপর সেই মূল্যায়নের উপর ভিত্তি করে উপযুক্ত এক্সিকিউশন পাথ অনুসরণ করে।

শর্ত প্রবাহ
চিত্র ৩: শর্ত প্রবাহ

যখন আপনি চান যে একাধিক স্টার্টার আপনার অটোমেশনটি সক্রিয় করুক, তখন একটি সিলেক্ট ফ্লো বেশ কার্যকর। যখন আপনি একটি select ফ্লো-এর মধ্যে দুই বা ততোধিক স্টার্টারকে অন্তর্ভুক্ত করেন, তখন স্টার্টারগুলোর যেকোনো একটি অটোমেশনটি সক্রিয় করতে পারে।

উদাহরণস্বরূপ, আপনি এমন একটি অটোমেশন লিখতে পারেন যা সূর্যাস্তের সময়, তাপমাত্রা একটি নির্দিষ্ট সীমার উপরে উঠলে, বা উজ্জ্বলতা একটি সীমা অতিক্রম করলে পর্দা নামিয়ে দেবে। তিনটি পৃথক স্টার্টার এই প্রতিটি পরিস্থিতি সামলাবে, এবং এই তিনটিই একটি select ফ্লো-এর মধ্যে থাকবে।

প্রবাহ নির্বাচন করুন
চিত্র ৪: প্রবাহ নির্বাচন করুন

নেস্টেড ফ্লো

জটিল অটোমেশনে, এক্সিকিউশন ফ্লো নোডগুলো নেস্টেডও হতে পারে। উদাহরণস্বরূপ, আপনার একটি সিকোয়েনশিয়াল ফ্লো থাকতে পারে যা একটি প্যারালাল ফ্লো এক্সিকিউট করে।

নেস্টেড এক্সিকিউশন ফ্লো
চিত্র ৫: নেস্টেড এক্সিকিউশন ফ্লো

নিম্নলিখিত সারণীতে বর্ণিত সীমাবদ্ধতা অনুসারে, আপনার নির্দিষ্ট চাহিদা মেটাতে ডিএসএল নোডগুলিকে বিভিন্ন উপায়ে নেস্ট এবং একত্রিত করা যেতে পারে। 'বিল্ডার' কলামটি কোটলিন টাইপসেফ বিল্ডার ডকুমেন্টেশনের সাথে লিঙ্ক করে, যেখানে প্রতিটি ধরণের নোডে কী ব্যবহার করার অনুমতি রয়েছে তার বিশদ বিবরণ দেওয়া আছে।

সারণি: কীভাবে নোডগুলিকে একত্রিত করা যেতে পারে
নোড নিম্নলিখিত নোড প্রকার এবং ডেটা থাকতে পারে নিম্নলিখিত নোড প্রকারগুলির মধ্যে একটির মধ্যে থাকতে হবে
স্টার্টার অভিব্যক্তি নির্বাচন করুন, ক্রমিক
ম্যানুয়াল স্টার্টার নির্বাচন করুন, ক্রমিক
স্টেটরিডার অভিব্যক্তি (সাধারণত একটি বৈশিষ্ট্য বা গুণের মান নিয়ে গঠিত) ক্রিয়া, অবস্থা
পদক্ষেপ কমান্ড, সত্তা, অভিব্যক্তি সমান্তরাল, নির্বাচন, ক্রমিক
ক্রমিক সমান্তরাল, নির্বাচন, ক্রমিক
সমান্তরাল পদক্ষেপ ক্রমিক
অবস্থা অভিব্যক্তি সমান্তরাল, ক্রমিক
নির্বাচন করুন কন্ডিশন, সিকোয়েনশিয়াল, স্টার্টার, ম্যানুয়াল স্টার্টার ক্রমিক, এবং প্রবাহের প্রথম নোড হতে হবে।

অটোমেশন ডিএসএল

হোম এপিআই-গুলোতে অটোমেশন ডিএসএল (ডোমেইন-স্পেসিফিক ল্যাঙ্গুয়েজ) ব্যবহার করে অটোমেশনগুলো সংজ্ঞায়িত করা হয়। অটোমেশন ডিএসএল-টি কোটলিন টাইপ-সেফ বিল্ডার ব্যবহার করে একটি কোটলিন ডিএসএল (ডোমেইন-স্পেসিফিক ল্যাঙ্গুয়েজ) হিসেবে প্রয়োগ করা হয়েছে এবং এটি বিশেষভাবে অটোমেশন টেমপ্লেট সংজ্ঞায়িত করার জন্য ডিজাইন করা হয়েছে।

যখন কোনো অটোমেশন কম্পাইল করা হয়, তখন কোটলিন টাইপ-সেফ বিল্ডারগুলো কোটলিন ডেটা ক্লাস তৈরি করে, যেগুলোকে পরবর্তীতে প্রোটোকল বাফার JSON-এ সিরিয়ালাইজ করা হয় এবং এই JSON-টি গুগলের অটোমেশন সার্ভিসগুলোতে কল করার জন্য ব্যবহৃত হয়।

অটোমেশন ডিএসএল অটোমেশন তৈরির প্রক্রিয়াকে সহজ ও সুবিন্যস্ত করে। এটি ডিভাইস এপিআই-তে থাকা Matter স্ট্যান্ডার্ড ট্রেইটস এবং smart home ট্রেইটসের ডেটা মডেলটিই নেটিভভাবে ব্যবহার করে।

অটোমেশন ডিএসএল (Automation DSL) একজন ব্যবহারকারীর হোমে অবস্থিত নির্দিষ্ট ডিভাইস ইনস্ট্যান্সের পরিবর্তে, অ্যাবস্ট্রাক্ট ডিভাইস টাইপের ভিত্তিতে একটি অটোমেশনের লজিকও সংজ্ঞায়িত করে। এটি ডেভেলপারকে এমন ইনপুট প্যারামিটার সরবরাহ করার সুযোগ দেয় যা রানটাইমে প্রকৃত ডিভাইস ইনস্ট্যান্স এবং অন্যান্য গুরুত্বপূর্ণ প্যারামিটার মান নির্দিষ্ট করতে ব্যবহৃত হতে পারে।

DSL সিনট্যাক্সটি কোটলিনের মতোই এবং সমানভাবে টাইপ-সেফ, কিন্তু অটোমেশন DSL-এ লেখা একটি অটোমেশন, বিশুদ্ধ কোটলিনে লেখা একই অটোমেশনের চেয়ে সরল ও সংক্ষিপ্ততর।

উদাহরণ

নিম্নলিখিতটি অটোমেশন ডিএসএল (Automation DSL) ব্যবহার করে লেখা একটি ডিভাইস চালু করার অটোমেশনের উদাহরণ:

val automation = automation {
  name = "MyFirstAutomation"
  description = "If light1 is on, turn on light2."
  isActive = true
  sequential {
    val onOffTrait = starter<_>(device1, OnOffLightDevice, OnOff)
    condition() { expression = onOffTrait.onOff equals true }
    action(device2, OnOffLightDevice) { command(OnOff.on()) }
  }
}

এই অটোমেশনটি খুবই সাধারণ: যখন device1 (একটি বাতি) চালু হয় (অর্থাৎ onOff অ্যাট্রিবিউটটি true তে পরিবর্তিত হয়), তখন এটি device2 চালু করার জন্য on() কমান্ড পাঠায়।

অটোমেশনটি একটি sequential নোড ব্যবহার করে, যার অর্থ হলো এর নোডগুলো ক্রমানুসারে চলবে।

sequential নোডের মধ্যে starter , condition এবং action এর মতো বিহেভিওরাল নোড থাকে। starter নোডের আউটপুট condition নোডে ব্যবহারের জন্য একটি ভেরিয়েবলে অ্যাসাইন করা হয়।