Библиотека Java использует объекты protobuf Struct для создания объекта состояния. В этом отношении документация действительно неверна, как если бы вы сравнивали код Java, создаваемый вашим фрагментом:
{
requestId: '123ABC',
agentUserId: 'user-123',
payload: {
devices: {
states: {
on: true,
openPercent: 50
}
}
}
}
Хотя мы предоставляем состояния, идентификатор устройства отсутствует, поэтому неясно, к какому устройству относится это состояние. Таким образом, это приведет к неверному аргументу.
Вам нужно будет обернуть ваш объект состояния в другую структуру, содержащую идентификатор устройства.
Struct.Builder deviceStateBuilder = Struct.newBuilder()
.putFields("device1", stateBuilder.build()
.build()
smartHomeApp.reportState(ReportStateAndNotificationRequest.newBuilder()
.setRequestId(requestId)
.setAgentUserId(agentId)
.setPayload(StateAndNotificationPayload.newBuilder()
.setDevices(ReportStateAndNotificationDevice.newBuilder()
.setStates(deviceStateBuilder.build())
.build()
)
.build()
)
.build()
С первым выпуском поддержки умного дома в библиотеке Java / Kotlin мы много откладывали до базовых объектов protobuf, чтобы уменьшить количество создаваемых и проверяемых API. По мере продвижения вперед, возможно, будет хорошей идеей взглянуть на то, где мы можем улучшить опыт разработчиков. Если у вас есть отзывы, я приглашаю вас посетить страницу библиотеки GitHub и отправить заявку.