В этом уроке мы расскажем, как создать систему уведомлений по SMS с Android Things и Twilio. Основная цель этого руководства — шаг за шагом описать, как реализовать систему IoT на основе Android Things, которая отправляет SMS-уведомления через Twilio.
Мы все знаем о важности IoT как прорывной технологии, которая революционизирует несколько экономических областей. Нам не нужно описывать, что такое IoT и как его использовать . Более того, Android Things, новая ОС IoT, созданная Google, достигла необходимой зрелости для использования в производственных средах. Последняя версия Android Things, 1.0, является первой и стабильной версией, которая обещает ввести новую парадигму в разработке приложений IoT на базе Android. Мы рассмотрели несколько аспектов Android Things в предыдущих статьях, поэтому нет необходимости в другой раз подчеркивать важную роль Android Things в экосистеме IoT.
Что касается IoT, важным аспектом является то, как отправлять уведомления пользователям, когда происходит определенное событие. К событиям уведомления могут относиться оповещения, информационные сообщения, предупреждающие сообщения и так далее. Есть несколько способов, которые мы можем реализовать, чтобы предупредить пользователя о конкретном событии, например:
- Отправка push-уведомления
- Отправка оповещения по электронной почте
- Отправка смс уведомления
Мы уже рассмотрели некоторые из этих методов в предыдущих постах. В этом уроке рассказывается, как внедрить системы SMS-уведомлений. В конце концов, SMS — это первый и самый старый метод уведомления, широко используемый в нескольких конкурсах.
Содержание
1. Обзор проекта системы SMS-уведомлений
Прежде чем углубляться в детали проекта, полезно иметь представление о том, что мы будем реализовывать, и об общей архитектуре, лежащей в основе этого проекта.
Чтобы сосредоточить внимание на основной теме проекта или создании системы уведомлений по SMS с использованием Android Things, можно предположить, что событие, о котором мы сообщим, инициируется значением, считанным с помощью простого датчика температуры.
Даже если это может быть простой подход, он может быть расширен. Прежде всего, мы можем предположить, что есть другие виды датчиков, которые могут инициировать SMS-уведомление. Более того, мы можем предположить, что устройство Android Things является сборщиком нескольких микроконтроллеров, которые управляют несколькими датчиками и обмениваются данными с Android Things, используя MQTT или другие протоколы. Таким образом, можно централизовать систему уведомлений SMS, и несколько MCU могут использовать эту систему.
Тем не менее, рисунок ниже описывает архитектуру проекта Android Things, которую мы будем реализовывать в ходе этого проекта IoT.
В этом руководстве используется датчик BMP280 или BME280, но можно использовать датчики других типов, если они совместимы с платформой Android Things.
Для простоты этот проект Android Things IoT можно разделить на следующие части:
- Чтение датчика данных BMP280 / BME280 с помощью Android Things
- Настройка Twilio для приема подключений от Android Things
- Реализация клиента Twilio в Android Things для отправки SMS-уведомлений
Давайте начнем с первого шага.
2. Чтение датчика данных BMP280 / BME280 с помощью Android Things
Эта первая часть проекта считывает данные датчиков с помощью Android Things API. Как вы, возможно, уже знаете, в Android Things есть несколько стратегий, которые можно использовать для считывания данных с датчиков:
- считывать данные датчика одним выстрелом
- непрерывно читать данные датчика
В первой стратегии приложение Android Things считывает данные датчика только один раз, и для получения нескольких выборок данных мы должны прочитать данные с определенным интервалом времени. С другой стороны, Android Things может считывать данные с датчиков непрерывно. Этот второй подход полезен, когда необходимо постоянно контролировать физическую величину, такую как температура, давление и так далее. Этот проект IoT использовал этот второй подход.
Настало время создать проект Android Things с помощью Android studio, и давайте изменим build.gradle, добавив следующую строку:
1
2
3
4
|
dependencies { .... implementation 'com.google.android.things.contrib:driver-bmx280:1.0' } |
Это добавит необходимые классы для обмена данными между Android Things и BMP280 / BME280.
Теперь в MainActivity мы должны добавить следующие строки:
1
2
|
private Bmx280SensorDriver driver; private SensorManager sensorManager; |
где SensorManager — это класс Android Things API, который управляет датчиками в Android Things.
Следующим шагом является инициализация датчика и регистрация слушателей:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
private void initSensor() { try { sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); sensorManager.registerDynamicSensorCallback(sensorCallback); driver = new Bmx280SensorDriver( "I2C1" ) ; driver.registerTemperatureSensor(); } catch (IOException ioe) { Log.e(TAG, "Error initializing the driver" , ioe); } } |
где sensorCallback
— это список, который мы должны реализовать, чтобы узнать, когда датчик подключен:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
private SensorManager.DynamicSensorCallback sensorCallback = new SensorManager.DynamicSensorCallback() { @Override public void onDynamicSensorConnected(Sensor sensor) { if (sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE) sensorManager.registerListener(sensorListener, sensor, SensorManager.SENSOR_DELAY_NORMAL); else if (sensor.getType() == Sensor.TYPE_PRESSURE) sensorManager.registerListener(pressSensorListener, sensor, SensorManager.SENSOR_DELAY_NORMAL); } @Override public void onDynamicSensorDisconnected(Sensor sensor) { super .onDynamicSensorDisconnected(sensor); } }; |
BMP280 или BME280 — это датчик, который считывает температуру и давление, поэтому мы регистрируем обоих слушателей. Кроме того, приложение определяет, как часто данные датчика должны быть получены с помощью SENSOR_DELAY_NORMAL
.
Наконец, приложение регистрирует слушателей датчика, чтобы знать, когда датчик считывает новое значение:
1
2
3
4
5
6
7
8
|
private SensorEventListener sensorListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { float temp = event.values[ 0 ]; // Here we will implement the logic to send the message } } } |
Теперь мы готовы к настройке Twilio.
3. Настройка Twilio для приема подключений от Android Things
В этом разделе мы расскажем, как настроить Twilio для отправки SMS-уведомлений с устройств Android Things. Если у вас нет учетной записи в Twilio, вы можете зарегистрироваться по этой ссылке . Если у вас есть учетная запись, вы можете создать новый проект, который мы будем использовать для отправки SMS-уведомлений на наш смартфон:
Теперь вам нужно создать собственный номер мобильного телефона для отправки вашего SMS. С помощью консоли Twilio вы можете легко создавать. Когда номер отправителя будет готов, на панели мониторинга Twilio появится вся информация, необходимая клиенту Android Things для отправки SMS-уведомления:
Перед завершением настройки Twilio вы можете попробовать отладчик Twilio API в (Меню-> Время выполнения-> API Explorer). Теперь вам нужно выбрать Programmable SMS и получить консоль для отправки уведомлений:
Нажав на кнопку «Сделать запрос», вы получите SMS на свой смартфон.
4. Реализация клиента Twilio в Android Things для отправки SMS-уведомлений
Это последний шаг этого проекта, где мы внедрим клиент Twilio в Android Things, который будет отправлять SMS-уведомления на наш смартфон, когда происходит определенное событие. В этом примере мы можем предположить, что контролировать температуру и отправлять SMS, когда она превышает пороговое значение.
Давайте создадим новый класс с именем TwilioCient.java
. Этот класс будет управлять всеми деталями общения. Для этого мы будем использовать OkHTTP.
Давайте создадим статический метод внутри этого класса, как показано ниже:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
public static void sendSMS(String body) { client = new OkHttpClient.Builder() .authenticator( new Authenticator() { @Override public Request authenticate(Route route, Response response) throws IOException { String credential = Credentials.basic(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN); return response.request() .newBuilder() .header( "Authorization" , credential) .build(); } }).build(); RequestBody reqBody = new FormBody.Builder() .add( "To" , DEST_PHONE_NUMBER) .add( "From" , ORIGIN_PHONE_NUMBER) .add( "Body" , body) .build(); Request req = new Request.Builder() .url(TWILIO_BASE_URL) .post(reqBody) .build(); client.newCall(req).enqueue( new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e(TAG, "Error" , e); } @Override public void onResponse(Call call, Response response) throws IOException { Log.i(TAG, "Ok message sent" ); Log.d(TAG, "Response [" + response.body().string() + "]" ); } }); } |
У этого метода есть несколько важных аспектов:
- Мы используем собственный аутентификатор для доступа к API с использованием TWILIO_ACCOUNT_SID и TWILIO_AUTH_TOKEN, как показано на панели инструментов.
- URL-адрес (TWILIO_BASE_URL) добавляется к API-интерфейсу Twilio для URL идентификатора учетной записи.
Это все. Наконец, мы можем изменить класс MainActivity следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
... public void onSensorChanged(SensorEvent event) { float temp = event.values[ 0 ]; if (temp > 30 ) { if ( lastTime == 0 || (System.currentTimeMillis() - lastTime) > 60000 ) { Log.d(TAG, "Sending message..." ); TwillioClient.sendSMS( "Alert! the temperatus is over 30°C" ); lastTime = System.currentTimeMillis(); } else { // Log.d(TAG, "Message Already sent...waiting"); } } } |
В этом методе мы отправляем не только SMS-уведомление, но и проверяем, что мы еще не отправили сообщение.
5. Резюме
В конце этой статьи вы узнали, как внедрить систему уведомлений по SMS с помощью Android Things и как интегрировать Twilio с Android Things. Как описано ранее, это простое учебное пособие может быть дополнительно расширено, чтобы охватить несколько случаев использования, когда необходимо уведомить событие для использования с помощью SMS.
Опубликовано на Java Code Geeks с разрешения Франческо Аццолы, партнера по нашей программе JCG. См. Оригинальную статью здесь: Создайте систему SMS-уведомлений с Android Things и Twilio.
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |