Задать вопрос
  • Как управлять яндекс-лампочкой в обход апи яндекса?

    @justslipknot Автор вопроса
    Как выяснилось, яндекс лампочки - это ребрендированная Tuya лампочка. У Tuya есть локальный протокол и модуль для Home Assistant. Но я решил вопрос немного иначе:
    1. Устанавливаем приложение Smart Life или Tuya Home (оба совместимы с яндекс лампами)
    2. Сбрасываем настройки лампочек и добавляем их в приложении Smart Life / Tuya Home
    3. Регистрируем приложение на платформе Tuya. Инструкция есть в этом репозитории.
      Пояснение
      Этот шаг нам нужно проделать, чтобы получить Local Key, который требуется для шифрования и расшифровки запросов (Local Key, как я понял, обновляется после сброса настроек). Инструкция, как быстро добавить устройства в приложение платформы Tuya так же представлено в репозитории

    4. Выбираем библиотеку для работы с Tuya local api. Я выбрал вот эту библиотеку для C#. На GitHub странице этой библиотеки есть инструкция по работе с Tuya local api.
    5. Реализуем нужный нам функционал


    Небольшой топорный пример из моего тестового проекта:
    Поиск устройств Tuya в сети

    // Эти данные можно получить на странице вашего приложения на платформе Tuya.
    var accessId = "<access id>";
    var apiSecret = "<api secret>";
    
    // Сканируем сеть на наличие доступных устройств Tuya. 
    // Хранение найденных устройств реализуется как душе угодно
    
    var scanner = new TuyaScanner();
    scanner.OnNewDeviceInfoReceived += (sender, info) =>
    {
       // логика сохранения найденных устройств 
    };


    Получение Local Key


    Самый важный этап.
    Пример взят из репозитория библиотеки
    var api = new TuyaApi(region: TuyaApi.Region.CentralEurope, accessId: ACCESS_ID, apiSecret: API_SECRET);
    var devices = await api.GetAllDevicesInfoAsync(anyDeviceId: DEVICE_ID);
    foreach(var device in devices)
    {
        Console.WriteLine($"Device: {device.Name}, device ID: {device.Id}, local key: {device.LocalKey}");
    }


    Отправка команд устройству

    var device = new TuyaDevice("<IP адрес>", "<local key>", "<device id>");
    
    // Пример команды включения лампочки
    // Метод FillJson автоматически подставляет нужные параметры, поэтому сразу пишем запрос.
    // Про методы DPS можно почитать в официальной документации Tuya
    var onCommand = device.FillJson("{\"dps\":{\"20\":true}}");
    
    var request = device.EncodeRequest(TuyaCommand.CONTROL, onCommand );
    
    // Посылаем сигнал. Если устройство не ответит, то падает исключение 
    var encodedResponse = await device.SendAsync(request);
    var response = device.DecodeResponse(encodedResponse);



    Далее остаётся разобраться с кодами команд и можете контролировать лампы как вам угодно.
    Ответ написан
    3 комментария
  • Как открыть папку в c#?

    @justslipknot
    Process.Start("explorer.exe", "путь к папке");
    Пример

    Process.Start("explorer.exe", "C:\");
    Ответ написан
    1 комментарий
  • Задание переменной, которая будет объектом?

    @justslipknot
    Имхо, правильнее будет интерфейсы юзать

    IDriver driver;
    if (true or false)
    {
        driver = new FirefoxDriver();
    }
    else
    {
        driver = new ChromeDriver();
    }


    ChromeDriver и FirefoxDriver в свою очередь наследуете от интерфейса IDriver и реализуете его методы/свойства
    Ответ написан
    Комментировать
  • Как подружить C# и Java?

    @justslipknot
    Ответ написан
    Комментировать