为了展示可以使用 Automation API 自动执行的各种不同任务,并激发更多灵感,下面列举了一些自动化示例。如需了解详情,请参阅 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()) }
}
}
在日出前 15 分钟打开百叶窗
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()) }
}
}
在上午 7:00 打开百叶窗,除非光线太强和/或天气太热
如需了解详情,请参阅触发器抑制。
请注意,此示例使用了一个启动器,该启动器要求已使用 Google Home app (GHA) 为结构分配地址。更改 Google 家庭住址介绍了用户如何输入结构化地址。
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.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 家庭住址介绍了用户如何输入结构化地址。
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 {
val email1 = "your.email@gmail.com"
// 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 the email list
command(Notification.sendNotifications("title", { body = "body" }))
}
}
}
如果灯亮着,则在指定时间广播消息
请注意,此示例使用了一个启动器,该启动器要求已使用 Google Home app (GHA) 为结构分配地址。更改 Google 家庭住址介绍了用户如何输入结构化地址。
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 家庭住址介绍了用户如何输入结构化地址。
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
命令是结构级命令,可用于自动控制结构中的任何设备。不过,Home API 应用可能无法访问所有设备。请参阅 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()) }
}
}
}
在 7 月和 8 月,将温控器在上午 8:00 和晚上 10:00 设为节能模式
请注意,此示例使用了一个启动器,该启动器要求已使用 Google Home app (GHA) 为结构分配地址。更改 Google 家庭住址介绍了用户如何输入结构化地址。
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.SimplifiedThermostat.Companion.setSystemMode
import com.google.home.google.SimplifiedThermostatTrait.SystemModeEnum
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 thermostat to Eco mode
action(thermostat, ThermostatDevice) {
command(SimplifiedThermostat.setSystemMode(SimplifiedThermostatSystemModeEnum.Eco))
}
}
}