نوع دستگاه ترموستات ممکن است با استفاده از چندین ویژگی Home API اجرا شود، اما ویژگی اصلی Thermostat
است. در زیر ویژگی های مورد نیاز و اختیاری برای دستگاه های ترموستات آورده شده است.
APIهای خانگی نوع دستگاه | صفات | نمونه برنامه | استفاده از مورد |
---|---|---|---|
ترموستاتدستگاهی که می تواند حسگرهای داخلی یا مجزا برای دما، رطوبت یا اشغال داشته باشد و امکان تنظیم دمای مورد نظر را فراهم کند. ترموستات قادر است اعلانهای مورد نیاز گرمایش و/یا سرمایش را به یک واحد گرمایش/سرمایش (به عنوان مثال، یک کنترلکننده هوای داخلی) ارسال کند یا میتواند مکانیزمی برای کنترل مستقیم یک واحد گرمایش یا سرمایش را شامل شود. | صفات مورد نیاز ماده شناسایی ترموستات ماده | ترموستات |
پشتیبانی از API اتوماسیون
ویژگیها و عناصر ترموستات زیر در Automation API پشتیبانی میشوند.
صفت | نوع صفت | نوع عنصر | عنصر |
---|---|---|---|
ترموستات | موضوع | فرمان | SetpointRaiseLower |
ترموستات | موضوع | صفت | activePresetHandle |
ترموستات | موضوع | صفت | دمای محلی |
ترموستات | موضوع | صفت | اشغال |
ترموستات | موضوع | صفت | occupiedCoolingSetpoint |
ترموستات | موضوع | صفت | occupiedHeatingSetpoint |
ترموستات | موضوع | صفت | دمای بیرون |
ترموستات | موضوع | صفت | setpointChangeSource |
ترموستات | موضوع | صفت | systemMode |
ترموستات | موضوع | صفت | temperatureSetpointHold |
ترموستات | موضوع | صفت | temperatureSetpointHoldDuration |
ترموستات | موضوع | صفت | ترموستات Running Mode |
ترموستات | موضوع | صفت | ترموستات Running State |
ترموستات | موضوع | صفت | CoolingSetpoint unoccupied |
ترموستات | موضوع | صفت | نقطه تنظیم گرمایش خالی |
ترموستات تمدید شده | گوگل | صفت | activePresetHandle |
ترموستات تمدید شده | گوگل | صفت | فعال RemoteTemperatureSensorIds |
ترموستات تمدید شده | گوگل | صفت | میانگین دمای محلی |
ترموستات تمدید شده | گوگل | صفت | ExtendedRunningMode |
ترموستات تمدید شده | گوگل | صفت | ExtendedSystemMode |
ترموستات ساده شده | گوگل | فرمان | SetSystemMode |
ترموستات ساده شده | گوگل | صفت | systemMode |
دمای محیط را بدست آورید
دمای محیط را با استفاده از ترموستات بدست آورید
برای دریافت دمای محیط ترموستات با استفاده از ویژگی Thermostat
، ویژگی localTemperature
را بخوانید.
API دستگاه
// Get the ambient temperature val thermostat = home.devices().list().first { device -> device.has(Thermostat) } val thermostatTraitFlow: Flow<Thermostat?> = thermostat .type(ThermostatDevice) .mapNotNull { it.standardTraits.thermostat } .distinctUntilChanged() val localTempFlow = thermostatTraitFlow.mapNotNull { it?.localTemperature }
API اتوماسیون
val automation = automation { sequential { val starterNode = starter<_>(thermostat, ThermostatDevice, Thermostat) // If the temperature is higher than 35C... condition { expression = starterNode.localTemperature greaterThan 35 } // ...and the automation hasn't been run for at least an hour... suppressFor(Duration.ofHours(1)) // ...broadcast a message action(speaker, SpeakerDevice) { command(AssistantBroadcast.broadcast("It's very hot outside.")) } } }
دمای محیط را با استفاده از TemperatureMeasurement بدست آورید
برای به دست آوردن دمای محیط ترموستات با استفاده از ویژگی TemperatureMeasurement
، ویژگی measuredValue
را بخوانید.
API دستگاه
val temperatureTraitFlow: Flow<TemperatureMeasurement?> = thermostat .type(TemperatureSensorDevice) .map { it.standardTraits.temperatureMeasurement } .distinctUntilChanged() val localTemp: Short? = temperatureTraitFlow.first()?.measuredValue
API اتوماسیون
val automation = automation { sequential { val temperature = starter<_>(thermostat, ThermostatDevice, TemperatureMeasurement) val stateReaderNode = stateReader<_>(light, DimmableLightDevice, OnOff) condition() { val expr1 = temperature.measuredValue greaterThanOrEquals 35 val expr2 = stateReaderNode.onOff equals true expression = expr1 and expr2 } action(light, DimmableLightDevice) { command(OnOff.on()) } } }
دمای متوسط را با استفاده از Extended Thermostat دریافت کنید
برای دریافت میانگین دما در چندین سنسور، ویژگی averageLocalTemperature
ویژگی ExtendedThermostat
را بخوانید.
API دستگاه
// Get the average temperature val thermostat = home.devices().list().first { device -> device.has(TemperatureSensorDevice) } val temperatureTraitFlow: Flow<TemperatureMeasurement?> = thermostat .type(TemperatureSensorDevice) .map { it.standardTraits.temperatureMeasurement } .distinctUntilChanged() val localTemp: Short? = temperatureTraitFlow.first()?.measuredValue
API اتوماسیون
val automation = automation { sequential { val temperature = starter<_>(thermostat, ThermostatDevice, ExtendedThermostat) val stateReaderNode = stateReader<_>(light, DimmableLightDevice, OnOff) // if the average temperature is >= 35C condition() { val expr1 = temperature.averageLocalTemperature greaterThanOrEquals 35 val expr2 = stateReaderNode.onOff equals true expression = expr1 and expr2 } // Turn on the light action(light, DimmableLightDevice) { command(OnOff.on()) } } }
رطوبت محیط را دریافت کنید
برای به دست آوردن رطوبت محیط ترموستات با استفاده از ویژگی RelativeHumidityMeasurement
، ویژگی measuredValue
را بخوانید.
API دستگاه
// Get the ambient humidity val humidityTraitFlow: Flow<RelativeHumidityMeasurement?> = humiditySensingThermostat .type(HumiditySensorDevice) .map { it.standardTraits.relativeHumidityMeasurement } .distinctUntilChanged() val localHumidity: UShort? = humidityTraitFlow.first()?.measuredValue
API اتوماسیون
val automation = automation { sequential { val humidity = starter<_>(thermostat, HumiditySensorDevice, RelativeHumidityMeasurement) val stateReaderNode = stateReader<_>(light, DimmableLightDevice, OnOff) // if the ambient humidity is >= 80% condition() { val expr1 = (humidity.measuredValue greaterThanOrEquals 80u) val expr2 = (stateReaderNode.onOff equals true) expression = expr1 and expr2 } // Turn on the light action(light, DimmableLightDevice) { command(OnOff.on()) } } }
مقیاس دمای نمایش داده شده را انتخاب کنید
برای تغییر واحد اندازهگیری دمایی که برای نمایشگر ترموستات استفاده میشود، ویژگی temperatureDisplayMode
در ThermostatUserInterfaceConfigurationTrait
را روی TemperatureDisplayModeEnum.Celsius
یا TemperatureDisplayModeEnum.Fahrenheit
تنظیم کنید.
API دستگاه
// Set the displayed temperature scale to Fahrenheit val uiConfig = home .devices() .list() .filter { device -> device.has(ThermostatUserInterfaceConfiguration) } .first() val uiConfigTraitFlow: Flow<ThermostatUserInterfaceConfiguration?> = uiConfig .type(ThermostatDevice) .map { it.standardTraits.thermostatUserInterfaceConfiguration } .distinctUntilChanged() val uiConfigTrait: ThermostatUserInterfaceConfiguration = uiConfigTraitFlow.first()!! if ( uiConfigTrait.supports(ThermostatUserInterfaceConfiguration.Attribute.temperatureDisplayMode) ) { val unused = uiConfigTrait.update { setTemperatureDisplayMode(TemperatureDisplayModeEnum.Fahrenheit) } }
API اتوماسیون
val automation = automation { isActive = true sequential { val stateReaderNode = stateReader<_>(thermostat, ThermostatDevice, ThermostatUserInterfaceConfiguration) // When someone says "Show the temperature in Fahrenheit", val unused = starter<_>(structure, VoiceStarter.OkGoogleEvent) { parameter(VoiceStarter.OkGoogleEvent.query("Show the temperature in Fahrenheit")) } // if the temperature isn't being shown in Fahrenheit condition() { expression = stateReaderNode.temperatureDisplayMode notEquals TemperatureDisplayModeEnum.Fahrenheit } // display the current temperature using Fahrenheit action(thermostat, ThermostatDevice) { update(ThermostatUserInterfaceConfiguration) { setTemperatureDisplayMode(TemperatureDisplayModeEnum.Fahrenheit) } } } }
حالت عملکرد را تغییر دهید
با تنظیم ویژگی ThermostatTrait.SystemModeEnum
، که مقادیر آن توسط ThermostatTrait.Attributes.systemMode
تعیین می شود، ترموستات را می توان به حالت های عملیاتی خاصی محدود کرد، که توسط ThermostatTrait.Attributes.SystemModeEnum
تعریف شده است.
API دستگاه
val thermostatDevice = structure.devices().list().first { device -> device.has(Thermostat) } val thermostatTraitFlow: Flow<Thermostat?> = thermostat.type(ThermostatDevice).map { it.standardTraits.thermostat }.distinctUntilChanged() val thermostatTrait: Thermostat = thermostatTraitFlow.first()!! // Set the system mode to Auto if (thermostatTrait.supports(Thermostat.Attribute.systemMode)) { val unused = thermostatTrait.update { setSystemMode(SystemModeEnum.Auto) } }
API اتوماسیون
val automation = automation { isActive = true // When the door lock state changes sequential { val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent) val stateReaderNode = stateReader<_>(thermostat, ThermostatDevice, SimplifiedThermostat) // if the door is unlocked and the thermostat is in Eco mode condition() { val expr1 = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock) val expr2 = (stateReaderNode.systemMode equals SimplifiedThermostatSystemModeEnum.Eco) expression = expr1 and expr2 } // Set the thermostat to Auto mode action(thermostat, ThermostatDevice) { command(SimplifiedThermostat.setSystemMode(SimplifiedThermostatSystemModeEnum.Auto)) } } }
وقتی ترموستات روی SystemModeEnum.Auto
تنظیم می شود، اطلاعات اضافی درباره حالت کارکرد ترموستات را می توان از ThermostatTrait.Attributes.thermostatRunningMode
که با مقادیر ThermostatRunningModeEnum
پر شده است، خواند.
API دستگاه
// Get the current thermostat running mode val runningModeTraitFlow: Flow<Thermostat?> = thermostat.type(ThermostatDevice).map { it.standardTraits.thermostat }.distinctUntilChanged() val runningMode: ThermostatTrait.ThermostatRunningModeEnum? = runningModeTraitFlow.first()?.thermostatRunningMode
API اتوماسیون
val automation = automation { isActive = true sequential { val stateReaderNode = stateReader<_>(thermostat, ThermostatDevice, Thermostat) // at 10:00am val unused = starter<_>(structure, Time.ScheduledTimeEvent) { parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(10, 0, 0, 0))) } // if the thermostat is in Auto mode and is currently cooling condition() { val expr1 = (stateReaderNode.systemMode equals ThermostatTrait.SystemModeEnum.Auto) val expr2 = (stateReaderNode.thermostatRunningMode equals ThermostatTrait.ThermostatRunningModeEnum.Cool) expression = expr1 and expr2 } // announce that it's in Cool mode action(structure) { command(AssistantBroadcast.broadcast("The thermostat is currently running in Cool mode.")) } } }
SimplifiedThermostatTrait
ThermostatTrait برای ساده کردن فرآیند تنظیم حالت عملکرد در اتوماسیون طراحی شده است. برای تغییر حالت عملکرد ترموستات با استفاده از SimplifiedThermostatTrait
، از SetSystemModeCommand
استفاده کنید، که مقادیر آن توسط SimplifiedThermostatTrait.SystemModeEnum
تعریف شده است.
این ویژگی فقط برای استفاده با Automation API در دسترس است.
API اتوماسیون
val automation = automation { isActive = true sequential { // When the presence state changes... val starterNode = starter<_>(structure, AreaPresenceState) // ...and if the area is unoccupied... condition() { expression = starterNode.presenceState equals PresenceState.PresenceStateVacant } // Set the thermostat to Eco mode action(thermostat, ThermostatDevice) { command(SimplifiedThermostat.setSystemMode(SimplifiedThermostatSystemModeEnum.Eco)) } } }
برای تعیین حالتهای سیستمی که ترموستات میتواند در آن کار کند، ThermostatTrait.Attributes.controlSequenceOfOperation
بخوانید که مقادیر آن توسط ThermostatTrait.ControlSequenceOfOperationEnum
تعیین میشود.
API دستگاه
// Get the controlSequenceOfOperation val standardTraitFlow: Flow<Thermostat?> = thermostat.type(ThermostatDevice).map { it.standardTraits.thermostat }.distinctUntilChanged() val controlSequenceOfOperation: ThermostatTrait.ControlSequenceOfOperationEnum? = standardTraitFlow.first()?.controlSequenceOfOperation
API اتوماسیون
val automation = automation { isActive = true sequential { val stateReaderNode = stateReader<_>(thermostat, ThermostatDevice, Thermostat) // When someone says "Switch to cool mode", val unused = starter<_>(structure, VoiceStarter.OkGoogleEvent) { parameter(VoiceStarter.OkGoogleEvent.query("Switch to cool mode")) } // if the thermostat is capable of operating in Cool mode, condition() { val expr1 = stateReaderNode.controlSequenceOfOperation notEquals ControlSequenceOfOperationEnum.HeatingOnly val expr2 = stateReaderNode.controlSequenceOfOperation notEquals ControlSequenceOfOperationEnum.HeatingWithReheat expression = expr1 and expr2 } action(thermostat, ThermostatDevice) { // switch to Cool mode update(SimplifiedThermostat) { command(SimplifiedThermostat.setSystemMode(SimplifiedThermostatSystemModeEnum.Cool)) } } } }
حالت عملیات برنامه نویسی را تغییر دهید
حالت عملیات برنامه نویسی ترموستات را می توان با استفاده از Thermostat
thermostatProgrammingOperationMode
تغییر داد که مقادیر آن توسط ProgrammingOperationModeBitmap
تعریف شده است.
API دستگاه
val thermostatTraitFlow: Flow<Thermostat?> = thermostat.type(ThermostatDevice).map { it.standardTraits.thermostat }.distinctUntilChanged() val thermostatTrait: Thermostat = thermostatTraitFlow.first()!! if (thermostatTrait.supports(Thermostat.Attribute.thermostatProgrammingOperationMode)) { val programmingOperationMode = thermostatTrait.thermostatProgrammingOperationMode!! // Enable autoRecovery on the thermostatProgrammingOperationMode val unused = thermostatTrait.update { setThermostatProgrammingOperationMode( ThermostatTrait.ProgrammingOperationModeBitmap( programmingOperationMode.scheduleActive, true, programmingOperationMode.economy, ) ) } }
API اتوماسیون
// When someone says "Reset programming operation mode" val automation = automation { isActive = true sequential { val unused = starter<_>(structure, VoiceStarter.OkGoogleEvent) { parameter(VoiceStarter.OkGoogleEvent.query("Reset programming operation mode")) } // Set all the flags on the programming operation mode action(thermostat, ThermostatDevice) { update(Thermostat) { setThermostatProgrammingOperationMode(ProgrammingOperationModeBitmap(true, true, true)) } } } }
نقطه تنظیم دما را تغییر دهید
برای تغییر نقطه تنظیم دما با استفاده از Thermostat
، با ThermostatTrait.SetpointRaiseLowerCommand
تماس بگیرید.
API دستگاه
val thermostatTraitFlow: Flow<Thermostat?> = thermostat.type(ThermostatDevice).map { it.standardTraits.thermostat }.distinctUntilChanged() val thermostatTrait: Thermostat = thermostatTraitFlow.first()!! // lower the temperature setpoint by 1 degree C thermostatTrait.setpointRaiseLower(amount = 1, mode = SetpointRaiseLowerModeEnum.Cool)
API اتوماسیون
val automation = automation { isActive = true sequential { val stateReaderNode = stateReader<_>(thermostat, ThermostatDevice, Thermostat) // At 10:00pm val unused = starter<_>(structure, Time.ScheduledTimeEvent) { parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(22, 0, 0, 0))) } // if the setpoint is warmer than 19C condition() { expression = stateReaderNode.occupiedCoolingSetpoint greaterThan 19 } // lower the temperature setpoint by 5 degrees action(thermostat, ThermostatDevice) { command(Thermostat.setpointRaiseLower(SetpointRaiseLowerModeEnum.Cool, 5)) } } }
یک نقطه تنظیم دما را اولویت بندی کنید
شما می توانید با تنظیم ویژگی temperatureSetpointHold
در ThermostatTrait
بر روی TemperatureSetpointHoldEnum.SetpointHoldOn
، یک نقطه تنظیم دما را بر یک برنامه از پیش برنامه ریزی شده ارجحیت دهید، یا با تنظیم آن بر روی TemperatureSetpointHoldEnum.SetpointHoldOff
، زمان بندی را اولویت قرار دهید.
API دستگاه
val thermostatTraitFlow: Flow<Thermostat?> = thermostat.type(ThermostatDevice).map { it.standardTraits.thermostat }.distinctUntilChanged() val thermostatTrait: Thermostat = thermostatTraitFlow.first()!! if (thermostatTrait.supports(Thermostat.Attribute.temperatureSetpointHold)) { // Set temperatureSetpointHold to SetpointHoldOn // allowing temperature setpoints to override any preprogrammed schedules. val unused = thermostatTrait.update { setTemperatureSetpointHold(TemperatureSetpointHoldEnum.SetpointHoldOn) }
API اتوماسیون
val automation = automation { isActive = true sequential { // When someone says "Prioritize thermostat setpoint" val unused = starter<_>(structure, VoiceStarter.OkGoogleEvent) { parameter(VoiceStarter.OkGoogleEvent.query("Prioritize thermostat setpoint")) } // make temperature setpoints override any preprogrammed schedules. action(thermostat, ThermostatDevice) { val unused2 = update(Thermostat) { setTemperatureSetpointHold(TemperatureSetpointHoldEnum.SetpointHoldOn) } } }
ThermostatTrait.Attributes.temperatureSetpointHoldDuration
را برای کنترل چند دقیقه فعال بودن یک نقطه تنظیم تنظیم کنید.
API دستگاه
val thermostatTraitFlow: Flow<Thermostat?> = thermostat.type(ThermostatDevice).map { it.standardTraits.thermostat }.distinctUntilChanged() val thermostatTrait: Thermostat = thermostatTraitFlow.first()!! if (thermostatTrait.supports(Thermostat.Attribute.temperatureSetpointHoldDuration)) { // Set the setpoint hold duration to 60 minutes val unused = thermostatTrait.update { setTemperatureSetpointHoldDuration(60u) } }
API اتوماسیون
val automation = automation { isActive = true sequential { val stateReaderNode = stateReader<_>(thermostat, ThermostatDevice, Thermostat) val unused = starter<_>(thermostat, ThermostatDevice, Thermostat) // if the temperature setpoint hold duration is less than 60 minutes... condition() { expression = stateReaderNode.temperatureSetpointHoldDuration.lessThan(60u) } // ...and the automation hasn't been run for at least 24 hours... suppressFor(Duration.ofHours(24)) // ...set the temperature setpoint hold duration to 60 minutes action(thermostat, ThermostatDevice) { val unused2 = update(Thermostat) { setTemperatureSetpointHoldDuration(60u) } } } }
برای تغییر خطمشی نگهداشتن نقطه تنظیم دما، که تعیین میکند چگونه و چه زمانی یک حالت نگهداشتن ترموستات به پایان میرسد، ThermostatTrait.SetTemperatureSetpointHoldPolicyCommand
را فراخوانی کنید.
مقادیر معتبر توسط TemperatureSetpointHoldPolicyBitmap
تعیین می شوند.
API دستگاه
val thermostatTraitFlow: Flow<Thermostat?> = thermostat.type(ThermostatDevice).map { it.standardTraits.thermostat }.distinctUntilChanged() val thermostatTrait: Thermostat = thermostatTraitFlow.first()!! if (thermostatTrait.supports(Thermostat.Attribute.temperatureSetpointHoldPolicy)) { // Set the temperature setpoint hold policy to holdDurationElapsedOrPresetChanged val unused = thermostatTrait.setTemperatureSetpointHoldPolicy( ThermostatTrait.TemperatureSetpointHoldPolicyBitmap( holdDurationElapsed = false, holdDurationElapsedOrPresetChanged = true, ) ) } val automation = automation { isActive = true sequential { // When someone says "Set my preferred hold duration", val unused = starter<_>(structure, VoiceStarter.OkGoogleEvent) { parameter(VoiceStarter.OkGoogleEvent.query("Set my preferred hold duration")) } // set the temperature setpoint hold policy to holdDurationElapsedOrPresetChanged action(thermostat, ThermostatDevice) { command( Thermostat.setTemperatureSetpointHoldPolicy( TemperatureSetpointHoldPolicyBitmap( holdDurationElapsed = false, holdDurationElapsedOrPresetChanged = true, ) ) ) } } }