Как я могу использовать события телеметрии IoT в пабе / подтеме? - PullRequest
0 голосов
/ 26 ноября 2018

Я прочитал документацию об облачном IoT API Google.И я написал простое приложение для Android вещей.На основе этой библиотеки Google .Мое приложение успешно подключено к платформе IoT, и я отправил тестовые данные.

Код моего приложения.

ConnectionParams connectionParams = new ConnectionParams.Builder()
            .setProjectId("my_pid")
            .setRegistry("my_reg", "my_server")
            .setDeviceId("my_device_name")
            .build();
IotCoreClient client = new IotCoreClient.Builder()
            .setConnectionParams(connectionParams)
            .setKeyPair(keys)
            .setTelemetryQueue(new LinkedTransferQueue<TelemetryEvent>())
            .build();

client.connect();

client.publishDeviceState("Test data\n".getBytes());

client.publishTelemetry(new TelemetryEvent("Sonata".getBytes(), null,TelemetryEvent.QOS_AT_LEAST_ONCE));

Но есть способ отправки данных датчиков устройства на платформу IoT ("publishTelemetry (Пармс ...)).

client.publishTelemetry(new TelemetryEvent("Sonata".getBytes(), null,TelemetryEvent.QOS_AT_LEAST_ONCE));

Этот код работает, но я не могу найти эти данные "Соната" в облачной платформе Google, и я не могу понять, как я могу использовать события телеметрии наPub / Sub topic?

Обновлено

Я нашел решение. Для первого шага я добавил подписчика в тему. Пример. Тема projects/my-project-id/topics/firstTop Пример подписчика (fsub - имя подписчика) projects/my-project-id/subscriptions/fsub И я написал простой код подписчика в Java и отправил сообщение с устройства Android вещей. И я получил данные телеметрии.

Это код подписчика в Java

import com.google.api.gax.core.CredentialsProvider;
import com.google.auth.Credentials;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.pubsub.v1.AckReplyConsumer;
import com.google.cloud.pubsub.v1.MessageReceiver;
import com.google.cloud.pubsub.v1.Subscriber;
import com.google.common.collect.Lists;
import com.google.pubsub.v1.ProjectSubscriptionName;
import com.google.pubsub.v1.PubsubMessage;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;

public class SubscriberExample {
    private static final String PROJECT_ID = "my-project-id";
    private static final BlockingQueue<PubsubMessage> messages = new LinkedBlockingDeque<>();

    static class MessageReceiverExample implements MessageReceiver {
        @Override
        public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
            messages.offer(message);
            consumer.ack();
        }
    }

    public static void main(String... args) throws Exception {
        String subscriptionId = "YOUR_SUBSCRIBER_ID";
        ProjectSubscriptionName subscriptionName = ProjectSubscriptionName.of(PROJECT_ID, subscriptionId);
        Subscriber subscriber = null;
        try {
            GoogleCredentials credentials = GoogleCredentials
                    .fromStream(new FileInputStream("~/google_cloud_pubsub-Project-0b66ab8c5060.json")) // you can get here https://cloud.google.com/docs/authentication/getting-started
                    .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
            subscriber = Subscriber.newBuilder(subscriptionName, new MessageReceiverExample())
                    .setCredentialsProvider(new CredentialsProvider() {
                        @Override
                        public Credentials getCredentials() throws IOException {
                            return credentials;
                        }
                    }).build();
            subscriber.startAsync().awaitRunning();
            while (true) {
                PubsubMessage message = messages.take();
                System.out.println("Message Id: " + message.getMessageId());
                System.out.println("Data: " + message.getData().toStringUtf8());
            }
        } finally {
            if (subscriber != null) {
                subscriber.stopAsync();
            }
        }
    }
}

1 Ответ

0 голосов
/ 27 ноября 2018

Прежде всего, чтобы убедиться, что оно работает и соединение действительно идет в ваш проект, проще всего взглянуть на консоль Google Cloud Platform для вашего проекта и на страницу устройства в разделе IoT Core (IoT Core->Registry-> Device), есть вкладка «История конфигурации и состояния», в которой вы должны увидеть «Тестовые данные» (как установлено с помощью вызова publishDeviceState).Это должно подтвердить, что по крайней мере все остальное работает как положено.

Предполагая, что это так, теперь вы захотите взглянуть на документацию Pub / Sub, чтобы начать понимать, что вы можете делать с Pub /Sub. Здесь - главная страница документа.Я рекомендую посмотреть на Облачные функции Google , чтобы быстро приступить к работе.В зависимости от того, что вы хотите сделать, Облачный поток данных также может быть хорошим вариантом для изучения.

Каждый из этих продуктов запускается на основе сообщений, публикуемых в Cloud Pub / Sub.Поэтому, как только вы вызываете «publishTelemetry», он отправляет телеметрию в IoT Core, которая затем публикует сообщение в теме Pub / Sub, указанной в реестре IoT Core, когда вы его создали.Затем запущенные продукты (GCF и Dataflow) получают объект Pub / Sub, из которого можно получить данные телеметрии.В документации есть примеры того, как это сделать.

...