LogicMachine Forum
Яндекс Алиса (Yandex Alice) - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Application Store (https://forum.logicmachine.net/forumdisplay.php?fid=11)
+--- Thread: Яндекс Алиса (Yandex Alice) (/showthread.php?tid=2022)

Pages: 1 2 3 4


RE: Яндекс Алиса (Yandex Alice) - kilkams - 16.10.2024

Всем привет. Несколько уточнений. Учетки от сторонних сервисов работают. Адрес сети может отличаться от remote.logicmachine.net. решил проблему с управлением, правда через костыль. в демона добавил строчку grp.write(groupaddress, data) в случае mapping[groupaddress].init = true

if not mapping[groupaddress].from_bus or os.time()-mapping[groupaddress].from_bus>1 then
if mapping[groupaddress].init then
log("grp write 1", groupaddress, data, mapping[groupaddress])
grp.write(groupaddress, data)
mapping[groupaddress].init = nil
else
log("grp write 2", groupaddress, data)
grp.write(groupaddress, data)


у меня init всегда true и от чего зависит этот атрибут, я не понял.
* table:
["from_bus"]
* number: хххххххххх
["init"]
* bool: true
["dt"]
* number: 1001
["actor"]
* bool: true
вот пример приходящего массива. может кто то знает что это за атрибут и как его корректно в false перевести?

Еще есть вопрос по умению

по умению плагина Yandex управление домом в LM "Температура света в кельвинах" какие типы данных он поддерживает? по наблюдениям только scale, а это 1 байт. температура в кельвинах требует от 2-х байт. Сделал виртуальный адрес и скрипт преобразующий scale в кельвины, но умение не видит этот адрес.


RE: Яндекс Алиса (Yandex Alice) - admin - 16.10.2024

@kilkams, we can't provide any support with Yandex integration. It is done by a third-party developer who is not active in our forums.
You can try asking your questions in logicmachinerus Telegram group.


RE: Яндекс Алиса (Yandex Alice) - kilkams - 16.10.2024

(16.10.2024, 10:48)admin Wrote: @kilkams, we can't provide any support with Yandex integration. It is done by a third-party developer who is not active in our forums.
You can try asking your questions in logicmachinerus Telegram group.

Спасибо, в группе телеграма уже общаюсь.

отвечаю на свой 2-й вопрос.
в файле /www/apps/data/yandex2/lua/lib.lua нужно заменить dt=5 на dt=7.
dictSkills["color_setting.temperature_k"] = {name="Температура света в кельвинах", dt=7, fields={{key="min", name="Минимальное значение", type="number"}, {key="max", name="Максимальное значение", type="number"}}}


RE: Яндекс Алиса (Yandex Alice) - djaval - 20.02.2025

А чего вы на русском общаетесь? Неприлично. Надо на международном языке


RE: Яндекс Алиса (Yandex Alice) - kilkams - 29.11.2025

(16.10.2024, 10:31)kilkams Wrote: Всем привет. Несколько уточнений. Учетки от сторонних сервисов работают. Адрес сети может отличаться от remote.logicmachine.net. решил проблему с управлением, правда через костыль. в демона добавил строчку grp.write(groupaddress, data) в случае mapping[groupaddress].init = true

if not mapping[groupaddress].from_bus or os.time()-mapping[groupaddress].from_bus>1 then
if mapping[groupaddress].init then
                                                log("grp write 1", groupaddress, data, mapping[groupaddress])
grp.write(groupaddress, data)
mapping[groupaddress].init = nil
else
log("grp write 2", groupaddress, data)
grp.write(groupaddress, data)


у меня init всегда true и от чего зависит этот атрибут, я не понял.
  * table:
  ["from_bus"]
    * number: хххххххххх
  ["init"]
    * bool: true
  ["dt"]
    * number: 1001
  ["actor"]
    * bool: true
вот пример приходящего массива. может кто то знает что это за атрибут и как его корректно в false перевести?

Еще есть вопрос по умению

по умению плагина Yandex управление домом в LM "Температура света в кельвинах" какие типы данных он поддерживает? по наблюдениям только scale, а это 1 байт. температура в кельвинах требует от 2-х байт. Сделал виртуальный адрес и скрипт преобразующий scale в кельвины, но умение не видит этот адрес.

Answering a question about Kelvin.
Problem description:
The current structure separates color_setting.color_model and color_setting.temperature_k as separate skills, but according to the Yandex API, they should be in a single capability with the type devices.capabilities.color_setting.
Solution:
Replace the function in the /data/apps/store/daemon/yandex2/daemon.lua file. function get_devices(all)

Code:
function get_devices(all)     local result = {}     if redis:exists(name_devices2) then         local devices = redis:hgetall(name_devices2)         for id, device in pairs(devices) do             device = json.pdecode(device)             if type(device) == "table" and device.name then                 device.id = id                                  -- Группируем skills по типам capabilities                 local capabilities_map = {}                 local simple_capabilities = {}                                  if type(device.skills) == "table" then                     for skill_id, s in pairs(device.skills) do                         if all then                             local skill = {id=skill_id}                             local has_act = false                             local has_status = false                                                          -- Обработка act                             if s.act then                                 local addr = grp.find(s.act)                                 if addr then                                     if not mapping[s.act] then                                         mapping[s.act] = {dt = addr.datatype}                                     end                                     mapping[s.act].actor = true                                     mapping[s.act].init = true                                     mapping[s.act].value = grp.getvalue(addr)                                     skill.act = s.act                                     has_act = true                                 end                             end                                                          -- Обработка status                             if s.status then                                 local addr = grp.find(s.status)                                 if addr then                                     if not mapping[s.status] then                                         mapping[s.status] = {dt = addr.datatype}                                     end                                     mapping[s.status].status = true                                     mapping[s.status].value = grp.getvalue(s.status)                                     skill.status = s.status                                     skill.value = grp.getvalue(s.status)                                     has_status = true                                 end                                                              end                                                          skill.f = s.f                                                          -- Проверяем, относится ли skill к color_setting                             if skill_id:match("^color_setting%.") then                                 local param_name = skill_id:match("^color_setting%.(.+)$")                                                                  if not capabilities_map.color_setting then                                     capabilities_map.color_setting = {                                         type = "color_setting",                                         parameters = {}                                     }                                 end                                                                  -- Добавляем параметр в color_setting                                 if param_name == "temperature_k" then                                     if type(skill.f) == "table" and skill.f.min and skill.f.max then                                         capabilities_map.color_setting.parameters.temperature_k = {                                             min = skill.f.min,                                             max = skill.f.max                                         }                                         if skill.f.precision then                                             capabilities_map.color_setting.parameters.temperature_k.precision = skill.f.precision                                         end                                     end                                 elseif param_name == "color_model" then                                     capabilities_map.color_setting.parameters.color_model = "hsv" -- или "rgb"                                 end                                                                  -- Сохраняем адреса для управления                                 if has_act or has_status then                                     if not capabilities_map.color_setting.addresses then                                         capabilities_map.color_setting.addresses = {}                                     end                                     capabilities_map.color_setting.addresses[param_name] = {                                         act = skill.act,                                         status = skill.status,                                         value = skill.value,                                         f = skill.f                                     }                                 end                                                              else                                 -- Обычный skill, не относящийся к color_setting                                 if has_act or has_status then                                     table.insert(simple_capabilities, skill)                                 end                             end                         else                             -- Режим для UI (не all)                             table.insert(simple_capabilities, skill_id)                         end                     end                                          -- Формируем итоговый массив skills                     if all then                         local skills = {}                                                  -- Добавляем сгруппированные capabilities                         for cap_type, cap_data in pairs(capabilities_map) do                             table.insert(skills, cap_data)                         end                                                  -- Добавляем обычные skills                         for _, skill in ipairs(simple_capabilities) do                             table.insert(skills, skill)                         end                                                  device.skills = skills                     else                         device.skills = simple_capabilities                     end                 else                     device.skills = {}                 end                 table.insert(result, device)             end         end     end     return result end

You can now change the backlight temperature via Yandex. Unfortunately, only the values in the table are available. A couple of event scripts are required to convert from % to Kelvin and back.
Code:
Огненный белый 1500 Мягкий белый 2700 Теплый белый 3400 Белый 4500 Дневной белый 5600 Холодный белый 6500 Туманный белый 7500 Небесный белый 9000

I also replaced the dt value in the /www/apps/data/yandex2/lua/lib.lua file from 5 to 7
Code:
dictSkills["color_setting.temperature_k"] = {name="Температура света в кельвинах", dt=7, fields={{key="min", name="Минимальное значение", type="number"}, {key="max", name="Максимальное значение", type="number"}}}



RE: Яндекс Алиса (Yandex Alice) - TomasIha - 03.06.2026

Hello, can you share the Yandex Alice app. I don't see LM5 in the app store. Thanks