জটিল অটোমেশনের জন্য অ্যান্ড্রয়েড ডিএসএল গাইড

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

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

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

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

automation {
  sequential {
    starter<_>(...)
    condition {...}
    action {...}
    action {...}
    action {...}
    }
}

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

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

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

automation {
  sequential {
    starter<_>(...)
    condition {...}
    parallel {
      action {...}
      action {...}
      action {...}
    }
  }
}

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

বিলম্ব

আপনি delayFor কীওয়ার্ড ব্যবহার করে আপনার অটোমেশনে বিরতি যোগ করতে পারেন। এই কীওয়ার্ডটি একটি java.time.Duration আর্গুমেন্ট গ্রহণ করে, যা নির্দেশ করে যে কার্য সম্পাদন চালিয়ে যাওয়ার আগে কতক্ষণ বিরতি নিতে হবে। এই বিরতির সময়কাল সর্বনিম্ন পাঁচ সেকেন্ড থেকে সর্বোচ্চ ২৪ ঘণ্টা পর্যন্ত হতে পারে।

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

sequential {
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  delayFor(Duration.ofSeconds(5))
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  delayFor(Duration.ofSeconds(5))
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  delayFor(Duration.ofSeconds(5))
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}

ট্রিগার দমন

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

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

automation {
  sequential {
    val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
    suppressFor(Duration.ofMinutes(30))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}

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

মৃত্যুদণ্ডের সংখ্যা সীমিত করুন

একটি অটোমেশন কতবার চালানো যাবে তা আপনি সীমিত করতে পারেন।

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

এটি করার জন্য, অটোমেশনটির maxExecutionCount মেটাডেটা ফিল্ডটি সেট করুন। নিচের উদাহরণটি এমন একটি অটোমেশন যা শুধুমাত্র একবারই এক্সিকিউট হতে পারে:

automation {
  // The automation can only be executed once.
  maxExecutionCount = 1
  // When the door lock state changes
  sequential {
    val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent)
    // if the door is unlocked
    condition() {
      expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock)
    }
    // turn the light on
    action(light, DimmableLightDevice) { command(OnOff.on()) }
  }
}

অটোমেশনটি শেষবারের মতো কার্যকর হওয়া শেষ হলে এবং maxExecutionCount পৌঁছালে তা সঙ্গে সঙ্গে মুছে ফেলা হয়। অটোমেশনটির হিস্ট্রি এন্ট্রি, automation_id সহ, Google Home app (GHA) অ্যাক্টিভিটি ট্যাবে থেকে যায়।

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

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

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

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

action(device, Fan) {
  update(FanControl) {
    setPercentSetting(50u)
    setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
  }
}