Repository navigation
Fix light with active scene (#814), Station 3 backlight scenes and colors via color_animation - #816
Conversation
835bdad to
c4827f6
Compare
…nd colors via color_animation
c4827f6 to
c24420f
Compare
|
Reporter of #814 here. The diagnosis matches what I traced independently before finding this PR: One detail that supports going by the shape of the value rather than by the instance: To be clear, I have not run this branch — this is not a test report, only confirmation that the analysis lines up with the setup in #814 ( I closed my own #817 as a duplicate of this one. |
|
Спасибо. Немного поправил логику, надеюсь ничего не сломал, делал вслепую. |
|
Спасибо за мёрдж и доработку логики! |
Что не так
internal_initзаканчивается наself._attr_color_mode = None, аinternal_updateвыставляет режим только для HSV-словаря или целого числа температуры. Если у лампы сейчас активна сцена (color_settingсоstate.instance = sceneи значением{"id", "name"}), режим так и остаётсяNone, и HA отвечает:По той же причине не создаётся подсветка Яндекс Станции 3 (
devices.types.smart_speaker.yandex.station.orion): её состояние приходит через capabilitycolor_animation(сцена или цвет), а не через значениеcolor.color_settingне работают.light.turn_onсeffectшлёт{"type": "devices.capabilities.color_setting", "state": {"instance": "scene", "value": "candle"}}, Quasar отвечает:Приложение и веб (yandex.ru/iot) ставят сцены и цвета через
devices.capabilities.color_animation. Запросы из вкладки Network:{"actions":[{"type":"devices.capabilities.color_animation","state":{"instance":"color_animation","value":{"current_animation_type":"scene","animations":{"scene":{"variant":"polar_lights","variants":[{"id":"polar_lights","options":[]}]}}}}}]}{"actions":[{"type":"devices.capabilities.color_animation","state":{"instance":"color_animation","value":{"current_animation_type":"color","animations":{"color":{"variant":"blue"}}}}}]}variantдля цвета совпадает сidиз палитрыcolor_setting. У сценыcandleвoptionsлежит настройка звука, её нужно брать из текущего состояния устройства.Что сделано
internal_initставит явныйcolor_modeиз набора поддерживаемых вместоNone. Хунк тот же, что в #812, так что если #812 вольётся первым, конфликта не будет. Там же выставляется флагanimation, если у устройства есть capabilitycolor_animation.internal_updateдля обычных ламп при активной сцене ставитColorMode.HS(если он поддерживается) и кладёт имя сцены вeffect. Словарь цвета теперь проверяется на ключ"h": раньше сцена{"id", "name"}ронялаKeyError, иinternal_updateне доходил до конца. Дляcolor_animation: сцена даётeffectиHS, цвет даётhs_colorиeffectпоvariant, температура даётcolor_temp_kelvin. Варианты сцен вместе с ихoptionsзапоминаются. У динамических сцен (sunset,sunrise,circadian) в состоянии приходит"variants": null, и в списке вариантов их нет, поэтому разбор терпитnull, а при включении такой сцены отправляется вариант без опций.async_turn_onу устройств сcolor_animationотправляет сцену и цвет палитры черезcolor_animationс тем же payload, что у приложения. Если подсветка выключена, в тот же запрос добавляетсяbacklight: true, иначе сцена ставится, а подсветка остаётся выключенной. Остальные устройства работают как раньше, черезcolorиscene.В
IOT_TYPESдобавленcolor_animation.Тесты:
test_issue814(лампа в сцене),test_station3_backlight(состояние),test_station3_actions(payload для turn_on и turn_off).test_stripпадал на master уже после 50ef6c1 (color_mode=None), теперь он ждётHSпри активной сцене.Проверка
Станция 3, HA 2026.8.1, v3.22.0 с этим патчем. Сущность создаётся.
light.turn_onс любой сценой изeffect_list(«Свеча», «Северное Сияние», «Лава лампа», «Ночь») и с цветом палитры («Синий») переключает станцию, состояние подтягивается сразу. Выключенная подсветка включается сразу со сценой.hs_colorиcolor_temp_kelvinчерезcolor/applyработают как раньше,turn_offдёргает togglebacklight. Устройства безcolor_animationне затронуты, тесты light проходят.