ডিএসএল ধারণা

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

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

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

  1. স্টার্টার — প্রাথমিক শর্তগুলি সংজ্ঞায়িত করে যা অটোমেশনকে সক্রিয় করে, যেমন একটি বৈশিষ্ট্যে পরিবর্তন। একটি অটোমেশন একটি স্টার্টার থাকতে হবে.
  2. শর্ত - একটি অটোমেশন সক্রিয় হওয়ার পরে মূল্যায়ন করার জন্য কোন অতিরিক্ত সীমাবদ্ধতা। একটি অটোমেশনের ক্রিয়াগুলি এগিয়ে যাওয়ার জন্য একটি শর্তের অভিব্যক্তিটিকে অবশ্যই true হিসাবে মূল্যায়ন করতে হবে৷
  3. অ্যাকশন — কমান্ড বা স্টেট আপডেট যা সঞ্চালিত হয় যখন সব শর্ত পূরণ করা হয়।

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

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

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

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

নোড

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

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

আচরণগত নোড

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

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

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

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

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

অনুক্রমিক মৃত্যুদন্ড প্রবাহ
চিত্র 1: অনুক্রমিক অটোমেশন প্রবাহ

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

সমান্তরাল মৃত্যুদন্ড প্রবাহ
চিত্র 2: সমান্তরাল অটোমেশন প্রবাহ

অন্য ধরনের এক্সিকিউশন ফ্লো হল কন্ডিশন ফ্লো , যা এক্সপ্রেশনের মূল্যায়নের উপর ভিত্তি করে এক্সিকিউশন ফ্লো পরিবর্তন করতে পারে।

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

অবস্থা প্রবাহ
চিত্র 3: অবস্থার প্রবাহ

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

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

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

নেস্টেড প্রবাহ

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

নেস্টেড মৃত্যুদন্ড প্রবাহ
চিত্র 5: নেস্টেড এক্সিকিউশন প্রবাহ

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

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

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

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

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

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

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

ডিএসএল সিনট্যাক্স কোটলিনের অনুরূপ, এবং সমানভাবে টাইপ-নিরাপদ, তবে অটোমেশন ডিএসএল-এ লেখা একটি অটোমেশন খাঁটি কোটলিনে লেখা একই অটোমেশনের চেয়ে সহজ এবং আরও সংক্ষিপ্ত।

উদাহরণ

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

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 এবং actionstarter নোডের আউটপুট condition নোডে ব্যবহারের জন্য একটি ভেরিয়েবলে বরাদ্দ করা হয়।