راهنمای DSL اندروید برای اتوماسیون های پیچیده

از Automation DSL می‌توان برای ایجاد اتوماسیون‌هایی پیچیده‌تر از مواردی که در راهنمای DSL - اتوماسیون‌های پایه در اندروید - مورد بحث قرار گرفته است، استفاده کرد.

متوالی با چندین اقدام

متوالی با چندین اقدام

یک اتوماسیون می‌تواند بیش از یک کار انجام دهد. برای مثال، به جای یک گره action ، می‌توانید چندین گره action داشته باشید که به ترتیب اجرا شوند:

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

متوالی با چندین اقدام موازی

متوالی با چندین اقدام موازی

اگر چندین گره action را در یک گره parallel قرار دهید، اقدامات به صورت همزمان اجرا می‌شوند.

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

اگر گره‌های action در گره sequential وجود داشته باشند که بعد از گره parallel می‌آیند، منتظر می‌مانند تا اجرای تمام گره‌های درون گره 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()) }
}

توجه داشته باشید که سرکوب ماشه بر تمام starters یک اتوماسیون که قبل از suppressFor قرار دارند، تأثیر می‌گذارد.

محدود کردن تعداد اعدام‌ها

شما می‌توانید تعداد دفعاتی که یک اتوماسیون اجازه اجرا دارد را محدود کنید.

برای مثال، ممکن است بخواهید یک اتوماسیون یک‌بار مصرف تنظیم کنید که وقتی برای یک روز از خانه دور هستید، جاروبرقی را روشن کند.

برای انجام این کار، فیلد متادیتای 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 ، در تب Activity Google Home app (GHA) باقی می‌ماند.

ویژگی‌های صفت را در یک عمل تنظیم کنید

برای تنظیم مقدار یک ویژگی صفت:

  1. یک گره update درون یک گره action ایجاد کنید، و ویژگی مربوطه را به عنوان آرگومان به گره update ارسال کنید:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. درون گره update ، برای اصلاح هر ویژگی، از یک تابع mutator استفاده کنید و مقدار جدید را به آن منتقل کنید. برای تشکیل نام تابع mutator:
    1. نام ویژگی را با حروف بزرگ بنویسید
    2. آن را با کلمه set پیشوند کنید.
    برای مثال، برای به‌روزرسانی یک ویژگی به نام defaultMoveRate ، از یک تابع mutator به نام setDefaultMoveRate استفاده می‌کنید.

توجه داشته باشید که یک گره update می‌تواند چندین تابع تغییردهنده داشته باشد. در اینجا مثالی آورده شده است که در آن دو ویژگی به‌روزرسانی می‌شوند:

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