想要使用Android应用程序使用AWS IOT开始开发
我正在寻找Android中的IOT示例。需要在AWS控制台和Android应用程序上启动基本配置。我已经测试了温度演示,但没有得到任何线索!需要关于影子,政策,角色的基本步骤。如何逐步配置和使用cognito。
下面的getshadow()方法被称为onCreate,需要实时更新值而不是on onCreate。
public void getShadows() {
GetShadowTask getControlShadowTask = new GetShadowTask("TemperatureControl");
getControlShadowTask.execute();
}
private class GetShadowTask extends AsyncTask<Void, Void, AsyncTaskResult<String>> {
private final String thingName;
public GetShadowTask(String name) {
thingName = name;
}
@Override
protected AsyncTaskResult<String> doInBackground(Void... voids) {
try {
GetThingShadowRequest getThingShadowRequest = new GetThingShadowRequest()
.withThingName(thingName);
GetThingShadowResult result = iotDataClient.getThingShadow(getThingShadowRequest);
// Toast.makeText(getApplication(),result.getPayload().remaining(),Toast.LENGTH_LONG).show();
byte[] bytes = new byte[result.getPayload().remaining()];
result.getPayload().get(bytes);
String resultString = new String(bytes);
return new AsyncTaskResult<String>(resultString);
} catch (Exception e) {
Log.e("E", "getShadowTask", e);
return new AsyncTaskResult<String>(e);
}
}
@Override
protected void onPostExecute(AsyncTaskResult<String> result) {
if (result.getError() == null) {
JsonParser parser=new JsonParser();
JsonObject jsonObject= (JsonObject) parser.parse(result.getResult());
response=result.getResult();
setPoint=jsonObject.getAsJsonObject("state").getAsJsonObject("reported")
.get("current_date").getAsString();
textView.setText(setPoint);
// Toast.makeText(getApplication(),setPoint,Toast.LENGTH_LONG).show();
Log.i(GetShadowTask.class.getCanonicalName(), result.getResult());
} else {
Log.e(GetShadowTask.class.getCanonicalName(), "getShadowTask", result.getError());
Toast.makeText(getApplication(),result.getError().toString(),Toast.LENGTH_LONG).show();
}
}
}
更新
影子
{ “期望”:{ “欢迎”:“aws-iot” }, “已报告”:{ “欢迎”:“aws-iot”, “current_date”:“06-Sep-2017 1:26:40 PM” } }
答案 0 :(得分:0)
AWS提供了完整的Github repo个Android示例。在示例中,执行PubSubWebSocket连接,订阅并将数据发布到阴影。
如果您仔细查看PubSubWebSocket示例,您将找到有关如何制定事物策略和角色的详细信息。它不能比那更简洁明了。
要理解和使用Cognito,请按照AmazonCognitoAuthDemo示例创建标识池并在PubSubWebSocket示例中使用它。
更好地了解角色和Cognito。请阅读AWS文档。
<强>更新强> 在物联网事物策略中,您是否提供了连接,订阅和发布的适当权限。该选项可在AWS IoT-&gt; Security-&gt; Policy-&gt; Create Policy中找到。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "arn:aws:iot:us-east-2:293751794947:topic/replaceWithATopic"
}
]
}
以上政策提供对用户的所有访问权限。另外,请确保您创建的池适用于未经身份验证的用户。
要获取对阴影类型的更改,请在示例android(WebSocketAwsPubSub)编辑框$aws/things/thing_name/shadow/update/accepted
将数据发布到阴影类型$aws/things/thing_name/shadow/update
更新2: Android代码,您将收到报告的消息。它对设备的怀疑。它是PubSubWebSocketSample的片段副本。
public void AwsSubscribe(){
final String topic = "$aws/things/D1/shadow/update/accepted";
Log.d(LOG_TAG, "topic = " + topic);
try {
mqttManager.subscribeToTopic(topic, AWSIotMqttQos.QOS0,
new AWSIotMqttNewMessageCallback() {
@Override
public void onMessageArrived(final String topic, final byte[] data) {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
String message = new String(data, "UTF-8");
Log.d(LOG_TAG, "Message arrived:");
Log.d(LOG_TAG, " Topic: " + topic);
Log.d(LOG_TAG, " Message: " + message);
tvLastMessage.setText(message);
} catch (UnsupportedEncodingException e) {
Log.e(LOG_TAG, "Message encoding error.", e);
}
}
});
}
});
} catch (Exception e) {
Log.e(LOG_TAG, "Subscription error.", e);
}
}
答案 1 :(得分:0)
如果要创建主题,只需更改此变量final String topic = "YOUR TOPIC"
的值,然后使用示例代码进行订阅即可。