Closed tuxamat closed 3 years ago
у меня например вот так работает
yandex_smart_home:
entity_config:
sensor.temperature_kitchen_comfort:
name: Датчик климата
room: Кухня
properties:
- type: temperature
entity: sensor.temperature_kitchen_comfort
- type: humidity
entity: sensor.humidity_kitchen_comfort
- type: co2_level
entity: sensor.co2_kitchen_comfort
не появляются отдельные датчики(
Победил
yandex_smart_home:
filter:
include_domains:
- switch
- sensor
entity_config:
sensor.narodmon:
name: Климат на улице
properties:
- type: temperature
entity: sensor.narodmon_temperature
- type: humidity
entity: sensor.narodmon_humidity
sensor.0x00158d0000da9eb4_eco2:
name: Климат в спальне
properties:
- type: temperature
entity: sensor.0x00158d0000da9eb4_temperature
- type: humidity
entity: sensor.0x00158d0000da9eb4_humidity
- type: co2_level
entity: sensor.0x00158d0000da9eb4_eco2
ну значит теперь надо только датчики открытия/закрытия и движения, яндекс их поддерживает, а компонент нет(
ну значит теперь надо только датчики открытия/закрытия и движения, яндекс их поддерживает, а компонент нет(
кажется Яндекс поддерживает эти датчики как "sensor" а в ХА они как "binary_sensor".. нужна доработка, да, но автор вроде отказался от поддержки =(
Постараюсь посмотреть в ближайшее время что там с сенсорами
Постараюсь посмотреть в ближайшее время что там с сенсорами
Спасибо, Дмитрий =) Там также добавилось несколько других новых типов устройств в УДЯ
чего то недопонимаю, в секции sensor. что за сенсор указывать? Один из entity? или какой то свой надо объявлять?
чего то недопонимаю, в секции sensor. что за сенсор указывать? Один из entity? или какой то свой надо объявлять?
Зависит от датчика(ов) Надо смотреть как залетают в ХА В домене просто указывается тип "sensor" Чтобы этот тип улетал в яндекс
Ну допустим у нас есть sensor.0d043030_himidity и sensor.er87er8r_temp. В entity_config: sensor.(тут что писать? выдумать свое название или одну из существующих сущностей?) properties:
Во-первых можете вообще не указывать отдельно датчики, достаточно будет
yandex_smart_home:
filter:
include_domains:
- sensor
Просто все датчики будут отдельно в яндексе. А если надо вместе, то эксперементируйте, у меня датчики с одного устройства, поэтому первое указываю главное как в ХА у меня co2, на сяоми - температурный, возможно это вообще не важно, я не проверял.
чего то недопонимаю, в секции sensor. что за сенсор указывать? Один из entity? или какой то свой надо объявлять?
я немного доработал код #120 , и с этой доработкой можно указывать по entity_id и датчик будет добавлен в УДЯ отдельным устройством:
yandex_smart_home:
filter:
include_domains:
# - sensor # можно указать так - как в сообщении выше
# - binary_sensor
include_entities:
# sensors
- binary_sensor.door_window_sensor_1580000000000
- sensor.temperature_1580000000000 # а можно вот так - по 1 датчику
дополнительно конфиг ему прописывать не нужно, оно там само все подхватится но впрочем все это (как писать конфиг) есть в мануале =)
(upd) да, binary_sensor - виден не будет по причинам указанным ниже
и остается сделать бинарные датчики - а Яндекс не включил их еще всем, как я понимаю. в prop.py нужно получается добавить что-то вроде PROPERTY_BOOL = PREFIX_PROPERTIES + 'bool' и с ним дальше уже плясать - как правильно это сделать - я не знаю, честно говоря, опыта маловато, так что ждем Дмитрия =)
boolean я так понял пока в бете, напишите плиз когда выйдет из беты и станет доступно всем. Остальное вроде работает уже. Ну или нужны конкретные примеры.
Чето я обновился и у меня все равно не появились датчики движения и открытия??? надо добавлять - binary_sensor в includes или все должно работать через -sensor?
Чето я обновился и у меня все равно не появились датчики движения и открытия??? надо добавлять - binary_sensor в includes или все должно работать через -sensor?
Да ни у кого их нет пока. Читаем выше
boolean я так понял пока в бете, напишите плиз когда выйдет из беты и станет доступно всем. Остальное вроде работает уже. Ну или нужны конкретные примеры.
если мне вдруг доступ даст Яндекс к бета-функцоналу - я отпишусь (запрос отправил). А вообще пример использования есть тут: https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/bool.html/
то есть компонент должен отдавать что-то вроде того:
...
"devices": [{
"id": "sensor-001-snsr",
"properties": [{
"type": "devices.properties.bool",
"state": {
"instance": "motion",
"value": false
}
}]
...
Короче говоря это тот же CustomEntityProperty, но без unit и с типом boolean. Я вроде понимаю, что нужно сделать, но не знаю как)) Так что вся надежда на вас =) P.S. Я пробовал поменять там всякое, но компонент не хочет отдавать эти датчики в списке устройств с каким бы то ни было значением..
у меня например вот так работает
yandex_smart_home: entity_config: sensor.temperature_kitchen_comfort: name: Датчик климата room: Кухня properties: - type: temperature entity: sensor.temperature_kitchen_comfort После того как так напишите в конфиге сходите в раздел тестирование навыка и посмотрите, что там в реальности ходит (там есть логи и там видно json), у меня, к примеру, температура дублировалась и я убрал температуру из properties: (это касается публикации температурных датчиков Aqara прокинутых через интеграцию XG3). Как я понял главный сенсор и так прокидывается, его в properties указывать не нужно иначе будет дублирование. По мне это баг...
у меня например вот так работает
yandex_smart_home: entity_config: sensor.temperature_kitchen_comfort: name: Датчик климата room: Кухня properties: - type: temperature entity: sensor.temperature_kitchen_comfort
После того как так напишите в конфиге сходите в раздел тестирование навыка и посмотрите, что там в реальности ходит (там есть логи и там видно json), у меня, к примеру, температура дублировалась и я убрал температуру из properties: (это касается публикации температурных датчиков Aqara прокинутых через интеграцию XG3). Как я понял главный сенсор и так прокидывается, его в properties указывать не нужно иначе будет дублирование. По мне это баг...
А зачем 2 раза один и тот же датчик указывать. Поставьте в properties датчик влажности, например. Тогда это будет единый датчик климата
у меня например вот так работает
yandex_smart_home: entity_config: sensor.temperature_kitchen_comfort: name: Датчик климата room: Кухня properties: - type: temperature entity: sensor.temperature_kitchen_comfort
После того как так напишите в конфиге сходите в раздел тестирование навыка и посмотрите, что там в реальности ходит (там есть логи и там видно json), у меня, к примеру, температура дублировалась и я убрал температуру из properties: (это касается публикации температурных датчиков Aqara прокинутых через интеграцию XG3). Как я понял главный сенсор и так прокидывается, его в properties указывать не нужно иначе будет дублирование. По мне это баг...
Последним обновлением компонента Дмитрий внес поправки с которыми сенсоры добавляются сами по себе - читайте тут и не нужно в entity_config ничего прописывать теперь. Просто пишете домен sensor в include_domains или нужные датчики в include_entities и все, никаких дополнительных properties не нужно приписывать..
А Ваш "баг" из-за того, что Вы в конфиге дублируете датчик =)
upd: отличная идея в комментарии выше
А Ваш "баг" из-за того, что Вы в конфиге дублируете датчик =)
@glebsterx не знаю, у меня есть такой код:
# Qingping ClearGrass Air Monitor CGS1
air_quality:
- platform: xiaomi_miio
name: Qingping ClearGrass Air Monitor
host:
token:
sensor:
- platform: template
sensors:
home_air_quality_temperature:
value_template: "{{ state_attr('air_quality.qingping_cleargrass_air_monitor', 'temperature') }}"
home_air_quality_humidity:
value_template: "{{ state_attr('air_quality.qingping_cleargrass_air_monitor', 'humidity') }}"
home_air_quality_co2_level:
value_template: "{{ state_attr('air_quality.qingping_cleargrass_air_monitor', 'carbon_dioxide') }}"
yandex_smart_home:
filter:
include_entities:
- sensor.home_air_quality_co2_level
entity_config:
sensor.home_air_quality_co2_level:
name: Датчик воздуха в кабинете
room: Кабинет
properties:
- type: temperature
entity: sensor.home_air_quality_temperature
- type: humidity
entity: sensor.home_air_quality_humidity
- type: co2_level
entity: sensor.home_air_quality_co2_level
И ничего тут не дублируется, вот так выглядит ответ:
{"request_id": "81f115f6-95af-411f-bbcd-97314e393cc6", "payload": {"devices": [{"id": "sensor.home_air_quality_co2_level", "capabilities": [], "properties": [{"type": "devices.properties.float", "state": {"instance": "temperature", "value": 23.8}}, {"type": "devices.properties.float", "state": {"instance": "humidity", "value": 44.2}}, {"type": "devices.properties.float", "state": {"instance": "co2_level", "value": 712.0}}]}]}}
А вот для такого кода
yandex_smart_home:
filter:
include_entities:
- sensor.0x158d000464e073_temperature
entity_config:
sensor.0x158d000464e073_temperature:
name: Датчик климата в кабинете
room: Кабинет
properties:
- type: temperature
entity: sensor.0x158d000464e073_temperature
- type: humidity
entity: sensor.0x158d000464e073_humidity
Температура дублируется в ответе. Почему мне пока не ясно, код компонента детально не смотрел. Явно видно, что поведение отличается, хотя описание одинаковое.
А зачем 2 раза один и тот же датчик указывать. Поставьте в properties датчик влажности, например. Тогда это будет единый датчик климата
@glebsterx собственно я об этом и написал, что так писать не следует, т.к. дублируются данные.
Просто пишете домен sensor в include_domains или нужные датчики в include_entities и все, никаких дополнительных properties не нужно приписывать..
@glebsterx можно, но хотелось бы их сгруппировать, раз такая возможность есть. Это упрощает получение информации по такому датчику. Команда "что с датчиком климата в кабинете?". Ну и названия им дать тоже хочется для команд.
А зачем 2 раза один и тот же датчик указывать. Поставьте в properties датчик влажности, например. Тогда это будет единый датчик климата
Собственно я об этом и написал, что так писать не следует, т.к. дублируются данные.
Хммм,.. в коде properties температуры, влажности и заряда батареи описаны отдельными функциями, а все остальное CustomEntityProperty - возможно поэтому и не дублируется.. И да, я понял =) перечитал)) "Главный" сенсор теперь прокидывается по умолчанию как сенсор с его данными. То есть логика такая, что мы добавляем дополнительные данные к нему в entity_config
Да, компонент нужно еще дорабатывать, потому что появятся boolean датчики..
"Главный" сенсор теперь прокидывается по умолчанию как сенсор с его данными. То есть логика такая, что мы добавляем дополнительные данные к нему в entity_config
@glebsterx я тоже так думал, но в примере с сенсорами, созданными через шаблоны (я код привёл выше и ответ из логов) так не работает. :) upd: Возможно тут важен порядок в properties, в этом примере co2 последним идёт, а в изначальном примере температура первым в properties.
"Главный" сенсор теперь прокидывается по умолчанию как сенсор с его данными. То есть логика такая, что мы добавляем дополнительные данные к нему в entity_config
@glebsterx я тоже так думал, но в примере с сенсорами, созданными через шаблоны (я код привёл выше и ответ из логов) так не работает. :) upd: Возможно тут важен порядок в properties, в этом примере co2 последним идёт, а в изначальном примере температура первым в properties.
Мне все же кажется, что не в порядке дело, а как я писал выше - в том, что температура и влажность отдельно прописаны в prop.py а остальные properties типа универсальные, поэтому они не дублируются.. Спасибо за наблюдения =) я думаю Дмитрий (и другие разработчики) их учтут при доработке работы с датчиками =)
Мне все же кажется, что не в порядке дело, а как я писал выше - в том, что температура и влажность отдельно прописаны в prop.py а остальные properties типа универсальные, поэтому они не дублируются..
@glebsterx будет время посмотрю код, похоже на то, что дублироваться будут именно температура и влажность, остальное как в примере с co2 не будет.
Мне все же кажется, что не в порядке дело, а как я писал выше - в том, что температура и влажность отдельно прописаны в prop.py а остальные properties типа универсальные, поэтому они не дублируются..
@glebsterx будет время посмотрю код, похоже на то, что дублироваться будут именно температура и влажность, остальное как в примере с co2 не будет.
Я так прокинул датчики DHT, которые Алиса ввобще не видит. И да, там не дублируется. Именно потому что такого датчика она не видит изначально. А через properties увидела
entity_config:
sensor.dht11_temperature:
name: Климат
room: Кухня
properties:
- type: temperature
entity: sensor.dht11_temperature
- type: humidity
entity: sensor.dht11_humidity
Я так прокинул датчики DHT
@dronix27 а что там выше, какой сенсор? Ваш код не полный, не ясны детали.
Я так прокинул датчики DHT
@dronix27 а что там выше, какой сенсор? Ваш код не полный, не ясны детали.
Пардон, не доглядел. Поправил
Так как Яндекс еще не дает доступа к бета функционалу попробовал "вслепую" сделать классы для датчиков движения и герконов тут Но в целом результат дает такой:
2020-12-08T16:27:18+03:00: Got response from provider XXXXXXXXXXXXXXXX:
200
{"request_id": "XXXXXXXXXXXXXXXXX", "payload": {"devices": [{"id": "binary_sensor.door_window_sensor_158XXXXXXXXX", "capabilities": [], "properties": [{"type": "devices.properties.bool", "state": {"instance": "magnet", "value": true}}]}]}}
@register_property
class BatteryProperty(_Property):
type = PROPERTY_FLOAT
instance = 'battery_level'
@staticmethod
def supported(domain, features, entity_config, attributes):
if domain == vacuum.DOMAIN:
return vacuum.ATTR_BATTERY_LEVEL in attributes
elif domain == sensor.DOMAIN:
return attributes.get(ATTR_BATTERY_LEVEL) is not None
elif domain == binary_sensor.DOMAIN:
return attributes.get(ATTR_BATTERY_LEVEL) is not None
return False
def parameters(self):
return {
'instance': self.instance,
'unit': 'unit.percent'
}
def get_value(self):
value = 0
if self.state.domain == vacuum.DOMAIN:
value = self.state.attributes.get(vacuum.ATTR_BATTERY_LEVEL)
elif self.state.domain == sensor.DOMAIN:
value = self.state.attributes.get(ATTR_BATTERY_LEVEL)
elif self.state.domain == binary_sensor.DOMAIN:
value = self.state.attributes.get(ATTR_BATTERY_LEVEL)
if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE, "Invalid value")
return float(value)
@register_property
class MagnetProperty(_Property):
type = PROPERTY_BOOL
instance = 'magnet'
@staticmethod
def supported(domain, features, entity_config, attributes):
if domain == binary_sensor.DOMAIN:
return attributes.get(ATTR_DEVICE_CLASS) == 'opening'
return False
def parameters(self):
return {
'instance': self.instance
}
def get_value(self):
value = False
if self.state.domain == binary_sensor.DOMAIN:
value = self.state.state
if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE, "Invalid value")
return bool(value)
@register_property
class MotionProperty(_Property):
type = PROPERTY_BOOL
instance = 'motion'
@staticmethod
def supported(domain, features, entity_config, attributes):
if domain == binary_sensor.DOMAIN:
return attributes.get(ATTR_DEVICE_CLASS) == 'motion'
return False
def parameters(self):
return {
'instance': self.instance
}
def get_value(self):
value = False
if self.state.domain == binary_sensor.DOMAIN:
value = self.state.state
if value in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
raise SmartHomeError(ERR_NOT_SUPPORTED_IN_CURRENT_MODE, "Invalid value")
return bool(value)
плюс теперь снимаются показания с батареек датчиков, а не только с пылесосов
Специалистов прошу поправить чего так может не по фен-шую.
UPD: говорят "датчики типа "bool" еще не открыты для использования. Документация и API останутся прежними, но функционал будет доступен ближе к концу месяца."
@gumileeev как я написал в #176 - мы бессильны в этой ситуации - пока Яндекс не начнет поддерживать conductivity А на данный момент он не поддерживает. Актуальный список тут
Кстати сегодня стало известно, что Яндекс активно работает над датчиками. ;) @gumileeev я бы вместо conductivity все таки использовал water_level или любой другой вариант из имеющихся и написывал бы в поддержку о добавлении нужного Вам датчика проводимости.
Кстати сегодня стало известно, что Яндекс активно работает над датчиками. ;) @gumileeev я бы вместо conductivity все таки использовал water_level или любой другой вариант из имеющихся и написывал бы в поддержку о добавлении нужного Вам датчика проводимости.
water_level не подходит, у него значения в %. Так практически и сделал, прописал что это датчик CO2, пока так придется, и написал в Яндекс, что в стране агрономия на коленях без поддержки этих сенсоров 😁
поддерживает ли это расширение датчики из zigbee2mqtt через кастом конверторы? или что-то я делаю не так
в шаблоне данные датчиков описаны следующим образом
- platform: mqtt
name: outdoorTemperature
unique_id: 28886B77060000CB
state_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon"
unit_of_measurement: "°C"
value_template: "{{ value_json['temperature_28886B77060000CB'] | round(2) }}"
availability_topic: "zigbee2mqtt/bridge/state"
payload_available: "online"
payload_not_available: "offline"
json_attributes_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon"
icon: mdi:thermometer
- platform: mqtt
name: balkonTemperature
unique_id: balkonTemperature
state_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon"
unit_of_measurement: "°C"
value_template: "{{ value_json['temperature_l5'] | round(2) }}"
availability_topic: "zigbee2mqtt/bridge/state"
payload_available: "online"
payload_not_available: "offline"
json_attributes_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon"
icon: mdi:thermometer
- platform: mqtt
name: balkonHumidity
unique_id: balkonHumidity
state_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon"
unit_of_measurement: "%"
value_template: "{{ value_json['humidity_l5'] | round(2) }}"
availability_topic: "zigbee2mqtt/bridge/state"
payload_available: "online"
payload_not_available: "offline"
json_attributes_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon"
icon: mdi:water-percent
но в яндекс уходят только обычные датчики, которые ХА понял и создал автоматически
последний вариант конфига пробовал вот такой, но до этого и много других вариантов перебрал
yandex_smart_home:
filter:
include_domains:
- switch
- light
- sensor
include_entities:
- sensor.balkonTemperature
- sensor.balkonHumidity
entity_config:
sensor.balkon:
name: Датчик на балконе
room: Балкон
properties:
- type: temperature
entity: sensor.balkonTemperature
- type: humidity
entity: sensor.balkonHumidity
поддерживает ли это расширение датчики из zigbee2mqtt через кастом конверторы? или что-то я делаю не так
в шаблоне данные датчиков описаны следующим образом
- platform: mqtt name: outdoorTemperature unique_id: 28886B77060000CB state_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon" unit_of_measurement: "°C" value_template: "{{ value_json['temperature_28886B77060000CB'] | round(2) }}" availability_topic: "zigbee2mqtt/bridge/state" payload_available: "online" payload_not_available: "offline" json_attributes_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon" icon: mdi:thermometer - platform: mqtt name: balkonTemperature unique_id: balkonTemperature state_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon" unit_of_measurement: "°C" value_template: "{{ value_json['temperature_l5'] | round(2) }}" availability_topic: "zigbee2mqtt/bridge/state" payload_available: "online" payload_not_available: "offline" json_attributes_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon" icon: mdi:thermometer - platform: mqtt name: balkonHumidity unique_id: balkonHumidity state_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon" unit_of_measurement: "%" value_template: "{{ value_json['humidity_l5'] | round(2) }}" availability_topic: "zigbee2mqtt/bridge/state" payload_available: "online" payload_not_available: "offline" json_attributes_topic: "zigbee2mqtt/cc2531-ds18dht22-balkon" icon: mdi:water-percent
но в яндекс уходят только обычные датчики, которые ХА понял и создал автоматически
последний вариант конфига пробовал вот такой, но до этого и много других вариантов перебрал
yandex_smart_home: filter: include_domains: - switch - light - sensor include_entities: - sensor.balkonTemperature - sensor.balkonHumidity entity_config: sensor.balkon: name: Датчик на балконе room: Балкон properties: - type: temperature entity: sensor.balkonTemperature - type: humidity entity: sensor.balkonHumidity
Делайте по аналогии, пишите имя температурного сенсора, а потом указывайте его свойства, продублировав его имя и добавив влажность:
sensor.temperature_purifier_gostinaya:
name: Климат
room: Гостиная
properties:
- type: temperature
entity: sensor.temperature_purifier_gostinaya
- type: humidity
entity: sensor.humidity_purifier_gostinaya
да, переделал ещё раз и взлетело, спасибо
Яндекс объявил о поддержке датчиков Алисой, осталось их пробросить через ХА в нее...