Я прочитал документацию об облачном 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();
}
}
}
}