জটিল অটোমেশনের জন্য iOS DSL গাইড

অটোমেশন ডিএসএল ব্যবহার করে এমন সব অটোমেশন তৈরি করা যায়, যা "ডিএসএল গাইড - আইওএস-এর বেসিক অটোমেশন" -এ আলোচিত অটোমেশনগুলোর চেয়েও জটিল।

একাধিক ক্রিয়াকলাপের সাথে ক্রমিক

একাধিক ক্রিয়াকলাপের সাথে ক্রমিক

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

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

  starter(...)
  condition {...}
  action {...}
  action {...}
  action {...}

}

একাধিক সমান্তরাল ক্রিয়াকলাপের সাথে অনুক্রমিক

একাধিক সমান্তরাল ক্রিয়াকলাপের সাথে অনুক্রমিক

যদি আপনি একটি parallel নোডে একাধিক action নোড রাখেন, তাহলে অ্যাকশনগুলো একযোগে সম্পাদিত হয়।

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

  starter(...)
  condition {...}
  parallel {
    action {...}
    action {...}
    action {...}
  }

}

যদি sequential নোডের মধ্যে parallel নোডের পরে কোনো action নোড থাকে, তবে সেগুলো ততক্ষণ পর্যন্ত এক্সিকিউট হওয়ার জন্য অপেক্ষা করে যতক্ষণ না parallel নোডের ভেতরের সমস্ত নোডের এক্সিকিউশন শেষ হয়।

বিলম্ব

আপনি delay(for:) মেথড ব্যবহার করে আপনার অটোমেশনে বিরতি যোগ করতে পারেন। এই মেথডটি একটি Duration আর্গুমেন্ট গ্রহণ করে, যা নির্দেশ করে যে এক্সিকিউশন চালিয়ে যাওয়ার আগে কতক্ষণ বিরতি নিতে হবে। বিরতির সময়কাল সর্বনিম্ন পাঁচ সেকেন্ড থেকে সর্বোচ্চ ২৪ ঘণ্টা পর্যন্ত হতে পারে।

উদাহরণস্বরূপ, প্রতিটি টগলের মধ্যে পাঁচ সেকেন্ডের বিরতি দিয়ে একটি আলো চারবার টগল করতে:

typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias OnOffTrait = Matter.OnOffTrait

sequential {
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
  delay(for:.seconds(5))
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
  delay(for:.seconds(5))
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
  delay(for:.seconds(5))
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}

ট্রিগার দমন

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

আপনার অটোমেশনে ট্রিগার সাপ্রেশন প্রয়োগ করতে, suppress(for:) কীওয়ার্ডটি ব্যবহার করুন এবং এর সাথে ` Duration আর্গুমেন্টটি যুক্ত করুন, যা নির্দেশ করে পরবর্তী ট্রিগারগুলিতে সাড়া দেওয়ার আগে কতক্ষণ অপেক্ষা করতে হবে। সাপ্রেশনের সময়কাল সর্বনিম্ন পাঁচ সেকেন্ড থেকে সর্বোচ্চ ২৪ ঘণ্টা পর্যন্ত হতে পারে।

typealias OccupancySensorDevice = Matter.OccupancySensorDeviceType
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias MotionDetectionTrait = Google.MotionDetectionTrait
typealias OnOffTrait = Matter.OnOffTrait

automation {
  let starterNode = starter(device, OccupancySensorDevice.self, MotionDetectionTrait.self)
  starterNode
  suppress(for: .seconds(30 * 60)  // 30 minutes
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}

মনে রাখবেন যে ট্রিগার সাপ্রেশন একটি অটোমেশনের মধ্যে থাকা সেই সমস্ত starters প্রভাবিত করে যা Suppression আগে থাকে।

একটি অ্যাকশনে বৈশিষ্ট্যের অ্যাট্রিবিউট সেট করুন

একটি ট্রেইট অ্যাট্রিবিউটের মান নির্ধারণ করতে:

  1. একটি action নোডের মধ্যে একটি update নোড তৈরি করুন এবং update নোডটির আর্গুমেন্ট হিসেবে প্রাসঙ্গিক ট্রেইটটি অন্তর্ভুক্ত করুন:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. update নোডের মধ্যে, পরিবর্তন করতে হবে এমন প্রতিটি অ্যাট্রিবিউটের জন্য একটি মিউটেটর ফাংশন ব্যবহার করুন এবং এতে নতুন মানটি পাস করুন। মিউটেটর ফাংশনটির নাম তৈরি করতে:
    1. অ্যাট্রিবিউটের নামটি বড় হাতের অক্ষরে লিখুন।
    2. এর আগে ' set শব্দটি যুক্ত করুন।
    উদাহরণস্বরূপ, defaultMoveRate নামক একটি অ্যাট্রিবিউট আপডেট করতে, আপনাকে setDefaultMoveRate নামক একটি মিউটেটর ফাংশন ব্যবহার করতে হবে।

মনে রাখবেন যে একটি update নোডে একাধিক মিউটেটর ফাংশন থাকতে পারে। এখানে একটি উদাহরণ দেওয়া হলো যেখানে দুটি অ্যাট্রিবিউট আপডেট করা হয়েছে:

typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait

action(fan, FanDeviceType.self) {
  update(FanControlTrait.self) {
    $0.setFanMode(.on)
  }
}