Проблема с блютус-подключением реле - RxAndroidBle - PullRequest
0 голосов
/ 21 мая 2019

Я говорю по-английски немного извините.Мне нужна ваша помощь, потому что я потратил много часов и не могу закончить последнюю деталь: _ (

Мне нужно подключить мобильный телефон с Bluetooth LE к реле, чтобы открыть или закрыть дверь. Предоставьтес родным Bluetooth и с сокетами, но не было никакого способа сделать что-то, что работало. После долгих исследований я нашел библиотеку RxAndroidBle и получил первые результаты.

Проблема в том, что я не привык кпрограммирование с реактивной парадигмой, и я действительно не знаю, что я делаю. Я передаю код и следующие шаги, чтобы увидеть, ускользает ли что-то от меня.

Шаги:

  1. Подключение напрямую по известному MAC-адресу к устройству
  2. Отправка шестнадцатеричной команды открытия
  3. В успешном случае выполнить команду закрытия с DELAY
    private void SendCommandRele(String enable, String disable, int time) {

        bleDevice = rxBleClient.getBleDevice("BB:A0:56:06:0A:0A");
        byte[] data = hexStringToByteArray (enable);
        UUID uuid = UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb");

        connectionDisposable = bleDevice.establishConnection(false)
            .observeOn(AndroidSchedulers.mainThread())
            .flatMapSingle(rxBleConnection -> rxBleConnection.writeCharacteristic(uuid, data))
            .doOnError(error -> errorConnection())
            .doOnComplete(new Action() {
                @Override
                public void run() throws Exception {
                    CloseDevice(disable);
                }
            })
            //.repeat(3)
            .retryWhen(io.reactivex.Observable::cache)
            .doAfterNext(next -> CloseDevice(disable))
            //.take(1)
            .subscribe(
                well -> {
                    Handler handler = new Handler();
                    handler.postDelayed(
                        new Runnable() {
                            @Override
                            public void run() {
                                CloseDevice(disable);
                            }
                        },
                        time
                    );
                },
                failed -> Log.e("E","Error: ")
            );

        progressDialog.dismiss();
        //connectionDisposable.dispose();
    }

--

    private void CloseDevice(String disable) {
        bleDevice = rxBleClient.getBleDevice("BB:A0:56:06:0A:0A");
        byte[] data = hexStringToByteArray (disable);

        connectionDisposable = bleDevice.establishConnection(false)
            .observeOn(AndroidSchedulers.mainThread())
            .flatMapSingle(rxBleConnection -> 
                rxBleConnection.writeCharacteristic(UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb"), data)
            )
            .doOnError(error -> {errorConnection();})
            //.repeat(3)
            //.retry(3)
            .take(1)
            .subscribe(
            );

        progressDialog.dismiss();
    }

Фактические результаты:

В целом, результаты, которые у меня есть, довольно положительные, так как иногда это работает, но иногда это не так. Рат, работает 10 раз подряд, а другой не работает на все.Конечно, мне нужно стабильное соединение.

Ожидаемые результаты:

правильная работа

1 Ответ

0 голосов
/ 21 мая 2019

Я нашел эти ошибки: - Задание COMMON_BROADCAST_MESSAGE_RECIVED не выполнено или истекло время ожидания. Клиент отключается. - bta_gattc_mark_bg_conn не может найти маску подключения bg для: XX: XX: XX: XX: XX

...