এটি অ্যান্ড্রয়েডে অটোমেশন ডিএসএল-এর মৌলিক ধারণাগুলির একটি সারসংক্ষেপ।
অটোমেশন উপাদান
একটি অটোমেশন নিম্নলিখিত মৌলিক উপাদানগুলি নিয়ে গঠিত, সাধারণত এই ক্রমে মূল্যায়ন করা হয়:
- স্টার্টার — অটোমেশন সক্রিয় করার প্রাথমিক শর্তগুলি সংজ্ঞায়িত করে, যেমন একটি বৈশিষ্ট্যের পরিবর্তন। একটি অটোমেশনের অবশ্যই একটি স্টার্টার থাকতে হবে।
- শর্ত — অটোমেশন সক্রিয় হওয়ার পরে মূল্যায়নের জন্য যে কোনও অতিরিক্ত সীমাবদ্ধতা। অটোমেশনের ক্রিয়াগুলি এগিয়ে যাওয়ার জন্য শর্তের এক্সপ্রেশনটিকে
trueহিসাবে মূল্যায়ন করতে হবে। - অ্যাকশন — সমস্ত শর্ত পূরণ হলে সম্পাদিত কমান্ড বা স্টেট আপডেট।
উদাহরণস্বরূপ, সম্ভবত আপনার কাছে এমন একটি অটোমেশন আছে যা সূর্যাস্ত এবং সূর্যোদয়ের মধ্যে যখন সেই ঘরের টিভি চালু থাকে তখন ঘরের আলো কমিয়ে দেয়। এই উদাহরণে:
- স্টার্টার — টিভি চালু করা হয়েছিল, যা একটি টিভি বৈশিষ্ট্যের অবস্থার পরিবর্তন।
- অবস্থা — টিভিটি যে বাড়িতে আছে তার বর্তমান সময় মূল্যায়ন করা হয়।
- অ্যাকশন — টিভি যে ঘরে আছে, সেই ঘরের আলোগুলো নিভে গেছে।
ঘরের টিভি চালু করলে অটোমেশন সক্রিয় হবে, কিন্তু "সূর্যাস্ত এবং সূর্যোদয়ের মধ্যে সময়" শর্ত পূরণ হলেই অটোমেশন কার্যকর হবে।
মৌলিক কাঠামোর পাশাপাশি, হোম এপিআই-তে অটোমেশনগুলিতে নাম এবং বিবরণের মতো মেটাডেটাও থাকে, যা ডেভেলপার এবং ব্যবহারকারীদের জন্য তাদের সনাক্ত করতে ব্যবহার করা যেতে পারে।
নোড
হোম এপিআই-তে, একটি অটোমেশনের লজিক্যাল স্ট্রাকচার নোড দিয়ে তৈরি। নোড হল বিমূর্ত, পুনঃব্যবহারযোগ্য ইউনিট যা সত্তা আচরণ বা এক্সিকিউশন প্রবাহকে প্রতিনিধিত্ব করে। প্রতিটি নোডে ইনপুট ভেরিয়েবল থাকতে পারে, সেইসাথে আউটপুট ভেরিয়েবলও থাকতে পারে যা অন্যান্য নোড দ্বারা গ্রাস করা যেতে পারে।
| নোড | নোডের ধরণ | কোটলিন বাস্তবায়ন | বিবরণ |
|---|---|---|---|
| স্টার্টার | আচরণগত | StarterNodeDsl | যখন কোনও বৈশিষ্ট্যের অবস্থা (যে কোনও বৈশিষ্ট্য) পরিবর্তিত হয় তখন একটি অটোমেশন শুরু করে। |
| স্টেটরিডার | আচরণগত | StateReaderNodeDsl | একটি trait অ্যাট্রিবিউট পড়ে এবং কন্ডিশন নোডে ব্যবহারের জন্য এর মান ক্যাপচার করতে দেয়। |
| অ্যাকশন | আচরণগত | ActionNodeDsl | বৈশিষ্ট্য কমান্ড(গুলি) আহ্বান করে। |
| ক্রমিক | সম্পাদন প্রবাহ | SequentialFlow | নেস্টেড অ্যাকশন নোডগুলিকে ক্রমানুসারে কার্যকর করে। এটি ডিফল্ট এক্সিকিউশন আচরণ। |
| সমান্তরাল | সম্পাদন প্রবাহ | ParallelFlow | সমান্তরালভাবে নেস্টেড অ্যাকশন নোডগুলি কার্যকর করে। |
| অবস্থা | সম্পাদন প্রবাহ | ConditionNodeDsl | লজিক্যাল এক্সপ্রেশনের মূল্যায়নের উপর ভিত্তি করে শর্তসাপেক্ষে এক্সিকিউশন ফ্লো পরিবর্তন করুন। শর্তগুলি একটি স্টার্টারের সাথে যুক্ত হতে পারে (স্টার্টার নির্দিষ্ট শর্ত) অথবা বিশ্বব্যাপী হতে পারে (সকল স্টার্টারের ক্ষেত্রে প্রযোজ্য)। |
| নির্বাচন করুন | সম্পাদন প্রবাহ | SelectFlow | একাধিক স্টার্টারকে একটি অটোমেশন সক্রিয় করার অনুমতি দেয়। |
| অভিব্যক্তি | মূল্য | Expression | এটি একটি বৈশিষ্ট্যের বৈশিষ্ট্যের মান, একটি ধ্রুবক, অথবা একটি আক্ষরিক মান হতে পারে এবং এটি অবশ্যই একটি তালিকা, সংখ্যা, বুলিয়ান বা স্ট্রিং অনুসারে মূল্যায়ন করতে হবে। |
আচরণগত নোড
স্টার্টার এবং অ্যাকশনের মতো নোডগুলি আচরণগত নোড। স্টার্টারগুলি ডিভাইসের বৈশিষ্ট্যের পরিবর্তনের উপর ভিত্তি করে একটি অটোমেশন সক্রিয় করে। অ্যাকশনগুলি ডিভাইস কমান্ড বা আপডেট বৈশিষ্ট্য জারি করে।
আচরণগত নোডগুলি সাধারণত ডিভাইসের বৈশিষ্ট্য এবং আউটপুট বৈশিষ্ট্যের অবস্থার সাথে সংযুক্ত থাকে যা অন্যান্য নোডে ইনপুট হিসেবে ব্যবহারের জন্য ব্যবহৃত হয়।
এক্সিকিউশন ফ্লো নোড
কিছু নোড এক্সিকিউশন প্রবাহকে প্রতিনিধিত্ব করে, যেমন ক্রমিক এবং সমান্তরাল। এই প্রতিটি নোডে আচরণগত নোড থাকে যা অটোমেশনকে সংজ্ঞায়িত করে।
উদাহরণস্বরূপ, একটি ক্রমিক প্রবাহে নোড থাকতে পারে যা ক্রমিক ক্রমে কার্যকর হয়। সাধারণত, এগুলি হবে স্টার্টার, কন্ডিশন এবং অ্যাকশন।
একটি সমান্তরাল প্রবাহে একই সময়ে একাধিক অ্যাকশন নোড কার্যকর হতে পারে, যেমন একই সময়ে একাধিক লাইট চালু করা। সমান্তরাল প্রবাহের সমস্ত শাখা শেষ না হওয়া পর্যন্ত সমান্তরাল প্রবাহ অনুসরণকারী নোডগুলি কার্যকর হবে না।
আরেকটি ধরণের এক্সিকিউশন ফ্লো হল কন্ডিশন ফ্লো , যা একটি এক্সপ্রেশনের মূল্যায়নের উপর ভিত্তি করে এক্সিকিউশন ফ্লো পরিবর্তন করতে পারে।
উদাহরণস্বরূপ, সম্ভবত আপনার কাছে এমন একটি অটোমেশন আছে যা রাতের সময় কিনা তার উপর ভিত্তি করে একটি ক্রিয়া সম্পাদন করে। একটি কন্ডিশন নোড দিনের সময় পরীক্ষা করে, তারপর সেই মূল্যায়নের উপর ভিত্তি করে উপযুক্ত কার্যকরকরণ পথ অনুসরণ করে।
যখন আপনি একাধিক স্টার্টার চান যা আপনার অটোমেশন সক্রিয় করতে পারে, তখন একটি সিলেক্ট ফ্লো কার্যকর। যখন আপনি একটি select ফ্লোতে দুই বা ততোধিক স্টার্টার সংযুক্ত করেন, তখন যেকোনো একটি স্টার্টার অটোমেশন সক্রিয় করতে পারে।
উদাহরণস্বরূপ, আপনি এমন একটি অটোমেশন লিখতে পারেন যা সূর্যাস্তের সময় ব্লাইন্ডগুলিকে কমিয়ে দেয়, যদি তাপমাত্রা একটি নির্দিষ্ট সীমার উপরে বেড়ে যায়, অথবা যদি উজ্জ্বলতা একটি সীমা অতিক্রম করে। তিনটি পৃথক স্টার্টার এই প্রতিটি পরিস্থিতি পরিচালনা করে, এবং তিনটিই একটি select প্রবাহে আবৃত থাকবে।
নেস্টেড প্রবাহ
জটিল অটোমেশনে, এক্সিকিউশন ফ্লো নোডগুলিও নেস্ট করা যেতে পারে। উদাহরণস্বরূপ, আপনার একটি ক্রমিক প্রবাহ থাকতে পারে যা একটি সমান্তরাল প্রবাহ কার্যকর করে।
নিম্নলিখিত টেবিলে বর্ণিত সীমাবদ্ধতা অনুসারে, আপনার নির্দিষ্ট চাহিদা পূরণের জন্য DSL নোডগুলিকে বিভিন্ন উপায়ে নেস্ট করা এবং একত্রিত করা যেতে পারে। বিল্ডার কলামটি কোটলিন টাইপসেফ বিল্ডার ডকুমেন্টেশনের সাথে লিঙ্ক করে, যা প্রতিটি ধরণের নোডে ব্যবহারের জন্য অনুমোদিত কী তা বিশদভাবে বর্ণনা করে।
| নোড | নিম্নলিখিত নোডের ধরণ এবং ডেটা থাকতে পারে | নিম্নলিখিত নোড ধরণের যেকোনো একটির মধ্যে থাকতে হবে |
|---|---|---|
| স্টার্টার | অভিব্যক্তি | নির্বাচন করুন, ক্রমিক |
| ম্যানুয়াল স্টার্টার | নির্বাচন করুন, ক্রমিক | |
| স্টেটরিডার | এক্সপ্রেশন (সাধারণত একটি বৈশিষ্ট্য বৈশিষ্ট্য মান নিয়ে গঠিত) | কর্ম, অবস্থা |
| অ্যাকশন | আদেশ, সত্তা, অভিব্যক্তি | সমান্তরাল, নির্বাচন, অনুক্রমিক |
| ক্রমিক | সমান্তরাল, নির্বাচন, অনুক্রমিক | |
| সমান্তরাল | অ্যাকশন | ক্রমিক |
| অবস্থা | অভিব্যক্তি | সমান্তরাল, ক্রমিক |
| নির্বাচন করুন | অবস্থা, অনুক্রমিক, স্টার্টার, ম্যানুয়াল স্টার্টার | ক্রমিক, এবং প্রবাহের প্রথম নোড হতে হবে |
অটোমেশন ডিএসএল
হোম এপিআইগুলিতে, অটোমেশনগুলি অটোমেশন ডিএসএল (ডোমেন-নির্দিষ্ট ভাষা) ব্যবহার করে সংজ্ঞায়িত করা হয়। অটোমেশন ডিএসএল কোটলিন ডিএসএল (ডোমেন-নির্দিষ্ট ভাষা) হিসাবে প্রয়োগ করা হয়, কোটলিন টাইপ-সেফ বিল্ডার ব্যবহার করে এবং বিশেষভাবে অটোমেশন টেমপ্লেটগুলি সংজ্ঞায়িত করার জন্য ডিজাইন করা হয়েছে।
যখন একটি অটোমেশন কম্পাইল করা হয়, তখন কোটলিন টাইপ-সেফ নির্মাতারা কোটলিন ডেটা ক্লাস তৈরি করে যা প্রোটোকল বাফার JSON-এ সিরিয়ালাইজ করা হয়, যা গুগলের অটোমেশন পরিষেবাগুলিতে কল করতে ব্যবহৃত হয়।
অটোমেশন ডিএসএল অটোমেশন তৈরির প্রক্রিয়াটিকে সহজ এবং সুবিন্যস্ত করে। এটি ডিভাইস এপিআইতে বৈশিষ্ট্যযুক্ত Matter স্ট্যান্ডার্ড বৈশিষ্ট্য এবং smart home বৈশিষ্ট্যের একই ডেটা মডেল ব্যবহার করে।
অটোমেশন ডিএসএল ব্যবহারকারীর বাড়িতে অবস্থিত নির্দিষ্ট ডিভাইসের উদাহরণের বিপরীতে, বিমূর্ত ডিভাইসের ধরণের ক্ষেত্রেও অটোমেশনের যুক্তি সংজ্ঞায়িত করে। এটি ডেভেলপারকে ইনপুট প্যারামিটার সরবরাহ করতে দেয় যা রানটাইমে প্রকৃত ডিভাইসের উদাহরণগুলি নির্দিষ্ট করার জন্য ব্যবহার করা যেতে পারে, পাশাপাশি অন্যান্য গুরুত্বপূর্ণ প্যারামিটার মানও।
DSL সিনট্যাক্স কোটলিনের মতোই, এবং সমানভাবে টাইপ-নিরাপদ, তবে অটোমেশন 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 নোডে ব্যবহারের জন্য একটি ভেরিয়েবলের সাথে সংযুক্ত করা হয়।