نمونه‌هایی از خودکارسازی در Android

برای نشان دادن طیف وسیعی از وظایف مختلف که می‌توانند بااستفاده از «میانای برنامه‌سازی کاربردی خودکارسازی» خودکارسازی شوند و شاید ایده‌های بیشتری را الهام بخشند، در اینجا چند نمونه از خودکارسازی‌ها آورده شده است. برای اطلاعات بیشتر، به راهنمای Android DSL مراجعه کنید.

روشن کردن دستگاهی وقتی دستگاه دیگری روشن یا خاموش می‌شود

import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.onOff
import com.google.home.matter.standard.OnOffLightDevice

...

automation {
  sequential {
    val starterNode = starter<_>(device1, OnOffLightDevice, OnOff)
    val device2State = stateReader<_>(device2, OnOffLightDevice, OnOff)
    condition {
      // Only send the command if device2 is off
      expression = device2State.onOff equals false
    }
   // turn on device 2
   action(device2, OnOffLightDevice) { command(OnOff.on()) }
   }
}

اگر نور خیلی زیاد است، کرکره را ببندید

import com.google.home.Home
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.automation.and
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.greaterThan
import com.google.home.matter.standard.IlluminanceMeasurement
import com.google.home.matter.standard.IlluminanceMeasurement.Companion.measuredValue
import com.google.home.matter.standard.LightSensorDevice
import com.google.home.matter.standard.WindowCovering
import com.google.home.matter.standard.WindowCovering.Companion.currentPositionLift
import com.google.home.matter.standard.WindowCoveringDevice

...

automation {
  sequential {
    val starterNode = starter<_>(device1, LightSensorDevice, IlluminanceMeasurement)
    val blindsPosition = stateReader<_>(blinds, WindowCoveringDevice, WindowCovering)

    condition {
      // only send the command if
      // the blinds are open
      (blindsPosition.currentPositionLift greaterThan 0u) and
        // it's brighter than a certain threshold value
        (starterNode.measuredValue greaterThan 10u)
    }
    // close the blind
    action(blinds, WindowCoveringDevice) { command(WindowCovering.downOrClose()) }
  }
}

وقتی دما از آستانه‌ای فراتر رفت، پنکه روشن شود

import com.google.home.Home
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.Action
import com.google.home.automation.And
import com.google.home.automation.Automation
import com.google.home.automation.Condition
import com.google.home.automation.Equals
import com.google.home.automation.Node
import com.google.home.automation.SequentialFlow
import com.google.home.automation.Starter
import com.google.home.automation.StateReader
import com.google.home.matter.standard.FanDevice
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOffTrait.Attributes.onOff
import com.google.home.matter.standard.TemperatureMeasurement
import com.google.home.matter.standard.TemperatureMeasurement.measuredValue
import com.google.home.matter.standard.TemperatureSensorDevice

...

automation {
  sequential {
    val starterNode = starter<_>(thermometer, TemperatureSensorDevice, TemperatureMeasurement)

    val fanStateReaderNode = stateReader<_>(fan, FanDevice, OnOff)
    condition {
      // only send the command if the temperature is above 78F
      val expr1 = starterNode.measuredValue greaterThan 78
      // the fan is off
      val expr2 = fanStateReaderNode.onOff equals false
      expression = expr1 and expr2
    }
    // turn on the fan
    action(fan, FanDevice) { command(OnOff.on()) }
  }
}

وقتی درطول تعطیلات تابستانی حرکت شناسایی شد هشدار داده شود

برای اطلاعات بیشتر، به تأخیرها و سرکوب راه‌انداز مراجعه کنید.

import com.google.home.Home
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.automation.and
import com.google.home.automation.automation
import com.google.home.automation.condition
import com.google.home.automation.equals
import com.google.home.automation.greaterThan
import com.google.home.automation.starter
import com.google.home.automation.stateReader
import com.google.home.google.AssistantBroadcast
import com.google.home.google.MotionDetection
import com.google.home.google.MotionDetection.Companion.motionDetectionEventInProgress
import com.google.home.matter.standard.OccupancySensorDevice
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.onOff
import com.google.home.matter.standard.OnOffLightDevice
import com.google.home.matter.standard.SpeakerDevice
import java.time.Duration

...

automation {
  sequential {
    val starterNode = starter<_>(sensor, OccupancySensorDevice, MotionDetection)
    // only proceed if...
    condition {
      // ...there is currently motion taking place and...
      val expr1 = starterNode.motionDetectionEventInProgress
      // ...it is during our summer vacation
      val expr2 = time.currentDate.monthDay.between(
        MonthDay.of(Month.JULY, 15),
        MonthDay.of(Month.AUGUST, 1),
      )
      expression = expr1 and expr2
    }
    // ignore the starter for one minute after it was last triggered
    suppressFor(Duration.ofMinutes(1))
    // make three announcements three seconds apart
    action(speaker, SpeakerDevice) {
      command(AssistantBroadcast.broadcast("Intruder detected!"))
    }
    delayFor(Duration.ofSeconds(3))
    action(speaker, SpeakerDevice) {
      command(AssistantBroadcast.broadcast("Intruder detected!"))
    }
    delayFor(Duration.ofSeconds(3))
    action(speaker, SpeakerDevice) {
      command(AssistantBroadcast.broadcast("Intruder detected!"))
    }
    // flash lights every two seconds
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
    delayFor(Duration.ofSeconds(2))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
    delayFor(Duration.ofSeconds(2))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
    delayFor(Duration.ofSeconds(2))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
    delayFor(Duration.ofSeconds(2))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
    delayFor(Duration.ofSeconds(2))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  }
}

‫۱۵ دقیقه قبل‌از طلوع آفتاب، کرکره‌ها باز شود

import com.google.home.Home
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.Action
import com.google.home.automation.and
import com.google.home.automation.automation
import com.google.home.automation.condition
import com.google.home.automation.equals
import com.google.home.automation.greaterThan
import com.google.home.automation.parallel
import com.google.home.automation.starter
import com.google.home.automation.stateReader
import com.google.home.google.Time
import com.google.home.google.Time.Companion.sunriseTime
import com.google.home.google.TimeTrait.SolarTimeStruct
import com.google.home.google.TimeTrait.SolarTimeType
import com.google.home.matter.standard.WindowCovering
import com.google.home.matter.standard.WindowCovering.Companion.upOrOpen
import com.google.home.matter.standard.WindowCoveringDevice
import java.time.Duration

...

automation {
  sequential {
    // 15 minutes before sunrise
    val unused =
      starter<_>(structure, Time.ScheduledTimeEvent) {
        parameter(Time.ScheduledTimeEvent.solarTime(
          SolarTimeStruct(SolarTimeType.Sunrise,
                          java.time.Duration.ofMinutes(-15))))
      }
    }
    sequential {
      manualStarter()
    }
    // simultaneously open the five blinds
    parallel {
        action(blind1, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
        action(blind2, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
        action(blind3, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
        action(blind4, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
        action(blind5, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
    }
}

ساعت ۷:۰۰ صبح کرکره‌ها را باز کن، مگراینکه خیلی روشن و/یا خیلی گرم باشد

برای اطلاعات بیشتر، سرکوب کردن محرک را ببینید.

توجه داشته باشید که این مثال از شروع‌کننده استفاده می‌کند که نیازمند این است که ساختار نشانی داشته باشد (برای مثال، هنگام ایجاد ساختار، یا با تنظیم آن در Google Home app (GHA)). تغییر نشانی خانه Google توضیح می‌دهد که کاربر چگونه می‌تواند نشانی ساختار را در برنامه Google Home وارد یا به‌روزرسانی کند.

import com.google.home.Home
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.greaterThan
import com.google.home.automation.lessThanOrEquals
import com.google.home.automation.notEquals
import com.google.home.automation.or
import com.google.home.automation.parallel
import com.google.home.automation.select
import com.google.home.automation.sequential
import com.google.home.automation.size
import com.google.home.automation.starter
import com.google.home.automation.stateReader
import com.google.home.google.Time
import com.google.home.matter.standard.IlluminanceMeasurement
import com.google.home.matter.standard.IlluminanceMeasurement.Companion.measuredValue
import com.google.home.matter.standard.LightSensorDevice
import com.google.home.matter.standard.TemperatureMeasurement
import com.google.home.matter.standard.TemperatureMeasurement.Companion.measuredValue
import com.google.home.matter.standard.TemperatureSensorDevice
import com.google.home.matter.standard.WindowCovering
import com.google.home.matter.standard.WindowCovering.Companion.upOrOpen
import com.google.home.matter.standard.WindowCoveringDevice
import java.time.Duration
import java.time.LocalTime

...

automation {
  sequential {
    select {
      sequential {
        // run the automation daily at 7am
        val earlyMorning =
          starter<_>(structure, Time.ScheduledTimeEvent) {
            parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(7, 0, 0, 0)))
          }
        val temperature = starter<_>(device, TemperatureSensorDevice, TemperatureMeasurement)
        val brightness = starter<_>(device1, LightSensorDevice, IlluminanceMeasurement)
        // don't run more often than every 15 minutes
        suppressFor(Duration.ofMinutes(15))
        condition {
          // temperature is below 32C/90F
          val expr1 = (temperature.measuredValue lessThanOrEquals 32)

          // too bright
          val expr2 = (brightness.measuredValue greaterThan 60u)

          expression = expr1 or expr2
        }
      }
      sequential { manualStarter() }
    }
    // simultaneously open the five blinds
    parallel {
      action(blind1, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
      action(blind2, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
      action(blind3, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
      action(blind4, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
      action(blind5, WindowCoveringDevice) { command(WindowCovering.upOrOpen()) }
    }
  }
}

اگر احتمال بارش باران وجود دارد، کرکره‌ها را ببندید

import com.google.home.HomeDevice
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.greaterThan
import com.google.home.automation.starter
import com.google.home.google.Weather
import com.google.home.google.Weather.Companion.currentConditions
import com.google.home.google.WeatherTrait
import com.google.home.google.WeatherTrait.CurrentConditions
import com.google.home.google.WeatherTrait.CurrentConditions.Adapter.chanceOfPrecipitationType
import com.google.home.google.WeatherTrait.CurrentConditions.Adapter.precipitationChancePercent
import com.google.home.google.WeatherTrait.PrecipitationType
import com.google.home.google.WeatherTrait.PrecipitationType.PrecipitationTypeEnum
import com.google.home.matter.standard.WindowCovering
import com.google.home.matter.standard.WindowCoveringDevice

automation {
  sequential {
    val weatherState = starter<_>(structure, trait = Weather)
    condition {
      val currentPrecipitationTypeIsRain = (weatherState.currentConditions.precipitationType equals
          WeatherTrait.PrecipitationType.PrecipitationTypeRain)
      val futurePrecipitationTypeIsRain = (weatherState.dailyForecastConditionsList[0].precipitationType equals WeatherTrait.PrecipitationType.PrecipitationTypeRain)

      val expression = currentPrecipitationTypeIsRain and futurePrecipitationTypeIsRain
    }

    parallel {
      for (windowBlind in windowBlinds) {
        action(windowBlind, WindowCoveringDevice) { command(WindowCovering.downOrClose()) }
      }
    }
  }
}

اگر چراغ روشن است، پنکه را خاموش کنید و تنظیم سرعت را تغییر دهید

import com.google.home.Home
import com.google.home.HomeClient
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.matter.standard.DimmableLightDevice
import com.google.home.matter.standard.FanControl
import com.google.home.matter.standard.FanControl.Companion.setFanMode
import com.google.home.matter.standard.FanControl.Companion.setPercentSetting
import com.google.home.matter.standard.FanControlTrait
import com.google.home.matter.standard.FanControlTrait.FanModeEnum
import com.google.home.matter.standard.FanDevice
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.onOff

...

automation {
  name = "Turn off the fan when the light is turned on."
  description = "If light is on, turn off the fan and change the speed setting."
  isActive = true
  sequential {
    // When the light's OnOff state changes...
    val starterNode = starter<_>(device, DimmableLightDevice, OnOff)
    // ...and if the light is turned on...
    condition() { expression = starterNode.onOff equals true }
    // ...turn off the fan and change the speed.
    action(device, FanDevice) {
      update(FanControl) {
        setFanMode(FanModeEnum.Off)
        setPercentSetting(20u)
      }
    }
  }
}

اگر کسی در آنجا بود چراغ را روشن کن

import com.google.home.Home
import com.google.home.HomeClient
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.google.AreaPresenceState
import com.google.home.google.AreaPresenceState.Companion.presenceState
import com.google.home.google.AreaPresenceStateTrait.PresenceState
import com.google.home.matter.standard.DimmableLightDevice
import com.google.home.matter.standard.OnOff

...

automation {
  description = "If the area is occupied, turn the light on."
  isActive = true
  sequential {
    // If the presence state changes...
    val starterNode = starter<_>(structure, AreaPresenceState)
    // ...and if the area is occupied...
    condition() {
      expression = starterNode.presenceState equals PresenceState.PresenceStateOccupied
    }
    // ...turn the light on.
    action(device, DimmableLightDevice) { command(OnOff.on()) }
  }
}

اگر کسی در خانه نیست، چراغ را خاموش کن

import com.google.home.Home
import com.google.home.HomeClient
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.and
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.stateReader
import com.google.home.google.AreaAttendanceState
import com.google.home.google.AreaAttendanceState.Companion.attendanceState
import com.google.home.google.AreaAttendanceStateTrait.AttendanceState
import com.google.home.matter.standard.DimmableLightDevice
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.onOff

...

automation {
  sequential {
    val starterNode = starter<_>(device, DimmableLightDevice, OnOff)
    val stateReaderNode = stateReader<_>(structure, AreaAttendanceState)

    condition() {
      val expr1 = starterNode.onOff equals true
      val expr2 =
        stateReaderNode.attendanceState equals AttendanceState.AttendanceStateNoHouseholdMembers
      // If the light is turned on and no one from the household is present
      expression = expr1 and expr2
    }
    // turn the light off
    action(device, DimmableLightDevice) { command(OnOff.off()) }
  }
}

اعلان در زمان مشخصی ارسال می‌شود

توجه داشته باشید که این مثال از شروع‌کننده استفاده می‌کند که نیازمند این است که ساختار نشانی داشته باشد (برای مثال، هنگام ایجاد ساختار، یا با تنظیم آن در Google Home app (GHA)). تغییر نشانی خانه Google توضیح می‌دهد که کاربر چگونه می‌تواند نشانی ساختار را در برنامه Google Home وارد یا به‌روزرسانی کند.

می‌توانید اعلان‌های لحظه‌ای را به‌عنوان کنش خودکارسازی بااستفاده از ویژگی Notification به اعضای خانوار ارسال کنید.

import com.google.home.Home
import com.google.home.HomeClient
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.starter
import com.google.home.google.AreaAttendanceState
import com.google.home.google.Notification
import com.google.home.google.Time
import java.time.LocalTime

...

automation {
  sequential {
    // If the time is 1:01:01:001
    val unused =
      starter<_>(structure, Time.ScheduledTimeEvent) {
        parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(1, 1, 1, 1)))
      }
    action(structure) {
      // send a notification to household members using the Google Home app
      command(Notification.sendNotifications("title", { body = "body" }))
    }
  }
}

فرمان sendNotifications یک رشته title الزامی و یک رشته body اختیاری می‌گیرد. اعلان‌ها به همه اعضای ساختار ارسال می‌شود.

اگر چراغ روشن باشد، پیامی در زمان مشخصی همه‌فرستی می‌شود

توجه داشته باشید که این مثال از شروع‌کننده استفاده می‌کند که نیازمند این است که ساختار نشانی داشته باشد (برای مثال، هنگام ایجاد ساختار، یا با تنظیم آن در Google Home app (GHA)). تغییر نشانی خانه Google توضیح می‌دهد که کاربر چگونه می‌تواند نشانی ساختار را در برنامه Google Home وارد یا به‌روزرسانی کند.

import com.google.home.Home
import com.google.home.HomeClient
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.starter
import com.google.home.google.AssistantBroadcast
import com.google.home.google.Time
import com.google.home.matter.standard.DimmableLightDevice
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.onOff
import java.time.LocalTime

...

automation {
  sequential {
    // If the time is 12:00...
    val unused =
      starter<_>(structure, Time.ScheduledTimeEvent) {
        parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(12, 0, 0, 0)))
      }

    val stateReaderNode = stateReader<_>(device, DimmableLightDevice, OnOff)
    // ...and the light is on...
    condition() { expression = stateReaderNode.onOff equals true }
    // ...broadcast a message over any devices that support Google Assistant.
    action(structure) { command(AssistantBroadcast.broadcast("It's midday.")) }
  }
}

وقتی چراغ روشن است، در زمان مشخصی موسیقی پخش شود

توجه داشته باشید که این مثال از شروع‌کننده استفاده می‌کند که نیازمند این است که ساختار نشانی داشته باشد (برای مثال، هنگام ایجاد ساختار، یا با تنظیم آن در Google Home app (GHA)). تغییر نشانی خانه Google توضیح می‌دهد که کاربر چگونه می‌تواند نشانی ساختار را در برنامه Google Home وارد یا به‌روزرسانی کند.

import com.google.home.Home
import com.google.home.HomeClient
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.starter
import com.google.home.google.AssistantFulfillment
import com.google.home.google.Time
import com.google.home.matter.standard.DimmableLightDevice
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.onOff
import com.google.home.matter.standard.SpeakerDevice
import java.time.LocalTime
...

automation {
  sequential {
    // When the time is 3:15pm...
    val unused =
      starter<_>(structure, Time.ScheduledTimeEvent) {
        parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(15, 15, 0, 0)))
      }
    val stateReaderNode = stateReader<_>(device, DimmableLightDevice, OnOff)
    // ...and the light's OnOff state is on...
    condition() { expression = stateReaderNode.onOff equals true }
    // ...tell Google Assistant to play music
    action(device, SpeakerDevice) { command(AssistantFulfillment.okGoogle("Play some music")) }
  }
}

این خودکارسازی به دستگاه «فر» نیاز دارد که ویژگی «ابر به ابر» RunCycle یا خوشه «وضعیت عملیاتی محفظه فر» Matter را پیاده‌سازی کند. برای اطلاعات بیشتر، به قابلیت همکاری در Android و تأخیرها مراجعه کنید.

import com.google.home.Home
import com.google.home.HomeClient
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.parallel
import com.google.home.automation.starter
import com.google.home.google.AssistantBroadcast
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.toggle
import com.google.home.matter.standard.OnOffLightDevice
import com.google.home.matter.standard.OvenCavityOperationalState
import com.google.home.matter.standard.OvenCavityOperationalState.Companion.currentPhase
import com.google.home.matter.standard.OvenCavityOperationalState.Companion.phaseList
import com.google.home.matter.standard.OvenCavityOperationalStateTrait.OperationalStateStruct
import com.google.home.matter.standard.OvenDevice
import com.google.home.matter.standard.SpeakerDevice
import java.time.Duration

...

automation {
  name = "Oven is up-to-temperature"
  description =
    "When an oven has finished pre-heating, living room lights blink and smart speaker makes an announcement"
  isActive = true

  sequential {
    val starterNode =
      starter<_>(oven, OvenDevice, OvenCavityOperationalState /* Or OperationalState */)
    condition {
      expression = starterNode.phaseList[operationalState.currentPhase.toUInt()] equals "pre-heated"
    }
    action(speaker, SpeakerDevice) {
      command(AssistantBroadcast.broadcast("The oven has now reached the chosen temperature."))
    }
    // "blink" the light by toggling them twice with a five-second pause,
    // then return to the original state.
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
    delayFor(Duration.ofSeconds(5))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  }
}

استفاده از «دستیار Google» برای ایجاد شرایط خواب

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

فرمان okGoogle فرمانی در سطح ساختار است و می‌تواند برای خودکارسازی هر دستگاهی در ساختار استفاده شود. بااین‌حال، برنامه «میاناهای برنامه‌سازی کاربردی خانه» ممکن است به همه دستگاه‌ها دسترسی نداشته باشد. برای دیدن نحوه اعمال اجازه‌ها در موارد مختلف، به اجازه‌های OkGoogle مراجعه کنید.

import com.google.home.Home
import com.google.home.HomeClient
import com.google.home.HomeDevice
import com.google.home.HomeManager
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.parallel
import com.google.home.automation.starter
import com.google.home.google.AssistantFulfillment
import com.google.home.google.VoiceStarter
import com.google.home.matter.standard.FanControl
import com.google.home.matter.standard.FanControl.Companion.setFanMode
import com.google.home.matter.standard.FanControlTrait.FanModeEnum
import com.google.home.matter.standard.FanDevice
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.toggle
import com.google.home.matter.standard.OnOffPluginUnitDevice
import com.google.home.matter.standard.SpeakerDevice
import com.google.home.matter.standard.WindowCovering
import com.google.home.matter.standard.WindowCoveringDevice

automation {
  name = "Lull to sleep"
  description =
    "If user says \"Hey Google, I can't sleep\", play ocean wave sounds, turn on the fan, turn on the plug, and roll down the blinds"
  isActive = true
  sequential {
    val unused =
      starter<_>(structure, VoiceStarter.OkGoogleEvent) {
        parameter(VoiceStarter.OkGoogleEvent.query("I can't sleep"))
      }

    parallel {
      // tell the speaker to play ocean wave sounds
      action(speaker, SpeakerDevice) {
        command(AssistantFulfillment.okGoogle("Play ocean wave sounds"))
      }
      // turn on the fan
      action(fan, FanDevice) { update(FanControl) { setFanMode(FanModeEnum.On) } }
      // turn on the outlet
      action(plug, OnOffPluginUnitDevice) { command(OnOff.on()) }
      // close the blinds
      action(blinds, WindowCoveringDevice) { command(WindowCovering.downOrClose()) }
    }
  }
}

روشن یا خاموش کردن Chromecast وقتی چراغ روشن می‌شود

import com.google.home.HomeDevice
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.starter
import com.google.home.google.ExtendedApplicationLauncher
import com.google.home.google.ExtendedChannel
import com.google.home.google.ExtendedLevelControl
import com.google.home.google.ExtendedMediaInput
import com.google.home.google.ExtendedMediaPlayback
import com.google.home.google.GoogleTVDevice
import com.google.home.google.MediaActivityState
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.on
import com.google.home.matter.standard.OnOff.Companion.onOff
import com.google.home.matter.standard.OnOffLightDevice

automation {
  name = "Light Activated Chromecast"
  description = "When light turns on, turn on/off the Chromecast."
  isActive = true
  sequential {
    select {
      // Create a starter node for each light device selected
      sequential {
        val starterNode = starter<_>(lightDevice, OnOffLightDevice, OnOff)
        // ...and if the light is turned on...
        condition { expression = starterNode.onOff equals true }
      }
      manualStarter()
    }
    parallel {
      // ...turn the Chromecast on or off.
      action(chromecastDevice, GoogleTVDevice) { command(OnOff.on()) }
    }
  }
}

وقتی چراغ روشن می‌شود، Chromecast متوقف شود و پیامی همه‌فرستی شود

import com.google.home.HomeDevice
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.starter
import com.google.home.google.AssistantBroadcast
import com.google.home.google.ExtendedApplicationLauncher
import com.google.home.google.ExtendedChannel
import com.google.home.google.ExtendedLevelControl
import com.google.home.google.ExtendedMediaInput
import com.google.home.google.ExtendedMediaPlayback
import com.google.home.google.GoogleTVDevice
import com.google.home.matter.standard.MediaPlayback
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.onOff
import com.google.home.matter.standard.OnOffLightDevice

automation {
  name = "Light Activated Chromecast Media Control"
  description = "When the light turns on, stop the media on Chromecast."
  isActive = true
  sequential {
    select {
      // Create a starter node for each light device selected
      sequential {
        val starterNode = starter<_>(lightDevice, OnOffLightDevice, OnOff)
        condition {
          // ...and the light is on...
          expression = starterNode.onOff equals true
        }
      }
      manualStarter()
    }
    val message = "Light turned on, stopping the media."
    parallel {
      // ...stop the media on the Chromecast...
      action(chromecastDevice, GoogleTVDevice) { command(MediaPlayback.stop()) }
      // ...broadcast message over any devices that support Google Assistant.
      action(speakerDevice, SpeakerDevice) { command(AssistantBroadcast.broadcast(message)) }
    }
  }
}

روشن کردن چراغ‌ها هنگام روشن شدن Chromecast

import com.google.home.HomeDevice
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.starter
import com.google.home.google.GoogleTVDevice
import com.google.home.matter.standard.MediaPlayback
import com.google.home.matter.standard.OnOff
import com.google.home.matter.standard.OnOff.Companion.onOff
import com.google.home.matter.standard.OnOffLightDevice

automation {
  name = "Chromecast Activated Lights"
  description = "When chromecast turns on, turn on a set of lights."
  isActive = true
  sequential {
    select {
      // Create a starter node for each Chromecast device selected...
      sequential {
        val starterNode = starter<_>(chromecastDevice, GoogleTVDevice, OnOff)
        condition {
          // ...and when the Chromecast is turned on...
          expression = starterNode.onOff equals true
        }
      }
      manualStarter()
    }
    parallel {
      // ...turn the lights on.
      action(lightDevice, OnOffLightDevice) { command(OnOff.on()) }
    }
  }
}

دما را در ساعت ۸ صبح و ۱۰ شب در ژوئیه و اوت تنظیم کن

توجه داشته باشید که این مثال از شروع‌کننده استفاده می‌کند که نیازمند این است که ساختار نشانی داشته باشد (برای مثال، هنگام ایجاد ساختار، یا با تنظیم آن در Google Home app (GHA)). تغییر نشانی خانه Google توضیح می‌دهد که کاربر چگونه می‌تواند نشانی ساختار را در برنامه Google Home وارد یا به‌روزرسانی کند.

import com.google.home.HomeDevice
import com.google.home.Id
import com.google.home.Structure
import com.google.home.automation.action
import com.google.home.automation.automation
import com.google.home.automation.equals
import com.google.home.automation.starter
import com.google.home.matter.standard.TemperatureControl
import com.google.home.matter.standard.TemperatureControlledCabinetDevice
import com.google.home.google.Time

automation {
  sequential {
    val starter =
      starter<_>(structure, event = Time.RecurringClockTimeScheduledEvent) {
        parameter(Time.RecurringClockTimeScheduledEvent.cronExpression("0 0 08,22 ? 7,8 * *"))
      }
    // Set the temperature to 5C
    action(tempControlDevice, TemperatureControlledCabinetDevice) {
      command(TemperatureControl.setTemperature(5))
    }
    assertThat(starter).isNotNull()
  }
}

اعمال شرایط مختلف برای آغازگرهای مختلف در یک خودکارسازی

هرگاه یکی از دو چراغ مشخص‌شده روشن شود، این خودکارسازی راه‌اندازی می‌شود. هریک از دو آغازگر شرایط خاص خود را دارد و شرایط به‌طور مستقل ارزیابی می‌شوند. اگر شرایط در هریک از آغازگرها برآورده شود، قانون کنشی را برای روشن کردن دستگاه Chromecast اجرا می‌کند.

automation {
  sequential {
    val unused1 = select {
      sequential {
        val starterNode = starter<_>(lightDevice, OnOffLightDevice, OnOff)
        // ...and if the light is turned on...
        condition { expression = starterNode.onOff equals true }
      }
      sequential {
        val starterNode = starter<_>(lightDevice2, OnOffLightDevice, OnOff)
        // ...and if the light is turned on...
        condition { expression = starterNode.onOff equals true }
      }
    }
    val unused2 = parallel {
      // ...turn the Chromecast on or off.
      action(chromecastDevice, GoogleTVDevice) { command(OnOff.on()) }
    }
  }
}