- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有任何机制或方法或步骤来检测从应用程序到 KAA 服务器的端点(KAA SDK)连接。
如果不是,那么我们如何通过远程识别故障设备?或者我们如何识别在现场部署设备后无法与 KAA 服务器通信的设备?
如何实现这一要求以释放物联网的力量??
最佳答案
如果您的端点在连接到 Kaa 服务器时遇到一些问题,则会发生“故障转移”。
所以你必须定义你自己的故障转移策略并为你的 Kaa 客户端设置它。每次发生故障转移策略的 onFialover()
方法将被调用。
您可以在下面看到 Java SDK 的代码示例。
import org.kaaproject.kaa.client.DesktopKaaPlatformContext;
import org.kaaproject.kaa.client.Kaa;
import org.kaaproject.kaa.client.KaaClient;
import org.kaaproject.kaa.client.SimpleKaaClientStateListener;
import org.kaaproject.kaa.client.channel.failover.FailoverDecision;
import org.kaaproject.kaa.client.channel.failover.FailoverStatus;
import org.kaaproject.kaa.client.channel.failover.strategies.DefaultFailoverStrategy;
import org.kaaproject.kaa.client.exceptions.KaaRuntimeException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
* A demo application that shows how to use the Kaa credentials API.
*/
public class CredentialsDemo {
private static final Logger LOG = LoggerFactory.getLogger(CredentialsDemo.class);
private static KaaClient kaaClient;
public static void main(String[] args) throws InterruptedException, IOException {
LOG.info("Demo application started");
try {
// Create a Kaa client and add a startup listener
kaaClient = Kaa.newClient(new DesktopKaaPlatformContext(), new SimpleKaaClientStateListener() {
@Override
public void onStarted() {
super.onStarted();
LOG.info("Kaa client started");
}
}, true);
kaaClient.setFailoverStrategy(new CustomFailoverStrategy());
kaaClient.start();
// ... Do some work ...
LOG.info("Stopping application.");
kaaClient.stop();
} catch (KaaRuntimeException e) {
LOG.info("Cannot connect to server - no credentials found.");
LOG.info("Stopping application.");
}
}
// Give a possibility to manage device behavior when it loses connection
// or has other problems dealing with Kaa server.
private static class CustomFailoverStrategy extends DefaultFailoverStrategy {
@Override
public FailoverDecision onFailover(FailoverStatus failoverStatus) {
LOG.info("Failover happen. Failover type: " + failoverStatus);
// See enum DefaultFailoverStrategy from package org.kaaproject.kaa.client.channel.failover
// to list all possible values
switch (failoverStatus) {
case CURRENT_BOOTSTRAP_SERVER_NA:
LOG.info("Current Bootstrap server is not available. Trying connect to another one.");
// ... Do some recovery, send notification messages, etc. ...
// Trying to connect to another bootstrap node one-by-one every 5 seconds
return new FailoverDecision(FailoverDecision.FailoverAction.USE_NEXT_BOOTSTRAP, 5L, TimeUnit.SECONDS);
default:
return super.onFailover(failoverStatus);
}
}
}
}
checkCredentialsStatus()
中所示在下面的代码中。状态
IN_USE
显示端点至少有一次成功的连接尝试。
package org.kaaproject.kaa.examples.credentials.kaa;
import org.kaaproject.kaa.common.dto.ApplicationDto;
import org.kaaproject.kaa.common.dto.admin.AuthResultDto;
import org.kaaproject.kaa.common.dto.credentials.CredentialsStatus;
import org.kaaproject.kaa.examples.credentials.utils.IOUtils;
import org.kaaproject.kaa.server.common.admin.AdminClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
public class KaaAdminManager {
private static final Logger LOG = LoggerFactory.getLogger(KaaAdminManager.class);
private static final int DEFAULT_KAA_PORT = 8080;
private static final String APPLICATION_NAME = "Credentials demo";
public String tenantAdminUsername = "admin";
public String tenantAdminPassword = "admin123";
private AdminClient adminClient;
public KaaAdminManager(String sandboxIp) {
this.adminClient = new AdminClient(sandboxIp, DEFAULT_KAA_PORT);
}
// ...
/**
* Check credentials status for getting information
* @return credential status
*/
public void checkCredentialsStatus() {
LOG.info("Enter endpoint ID:");
// Reads endpoint ID (aka "endpoint key hash") from user input
String endpointId = IOUtils.getUserInput().trim();
LOG.info("Getting credentials status...");
try {
ApplicationDto app = getApplicationByName(APPLICATION_NAME);
String appToken = app.getApplicationToken();
// CredentialsStatus can be: AVAILABLE, IN_USE, REVOKED
// if endpoint is not found on Kaa server, exception will be thrown
CredentialsStatus status = adminClient.getCredentialsStatus(appToken, endpointId);
LOG.info("Credentials for endpoint ID = {} are now in status: {}", endpointId, status.toString());
} catch (Exception e) {
LOG.error("Get credentials status for endpoint ID = {} failed. Error: {}", endpointId, e.getMessage());
}
}
/**
* Get application object by specified application name
*/
private ApplicationDto getApplicationByName(String applicationName) {
checkAuthorizationAndLogin();
try {
List<ApplicationDto> applications = adminClient.getApplications();
for (ApplicationDto application : applications) {
if (application.getName().trim().equals(applicationName)) {
return application;
}
}
} catch (Exception e) {
LOG.error("Exception has occurred: " + e.getMessage());
}
return null;
}
/**
* Checks authorization and log in
*/
private void checkAuthorizationAndLogin() {
if (!checkAuth()) {
adminClient.login(tenantAdminUsername, tenantAdminPassword);
}
}
/**
* Do authorization check
* @return true if user is authorized, false otherwise
*/
private boolean checkAuth() {
AuthResultDto.Result authResult = null;
try {
authResult = adminClient.checkAuth().getAuthResult();
} catch (Exception e) {
LOG.error("Exception has occurred: " + e.getMessage());
}
return authResult == AuthResultDto.Result.OK;
}
}
AdminClient
的示例。在类
KaaAdminManager在
Credentials Demo Application来自 Kaa
sample-apps project在 GitHub 上。
关于kaa - 如何从应用程序检测端点(KAA SDK)是否连接到 KAA 服务器的天气,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40253865/
是否有任何机制或方法或步骤来检测从应用程序到 KAA 服务器的端点(KAA SDK)连接。 如果不是,那么我们如何通过远程识别故障设备?或者我们如何识别在现场部署设备后无法与 KAA 服务器通信的设备
我需要尝试通过 Kaa C SDK for Raspberry Pi 调试 Kaa 应用程序。 例如:Cassandra 数据分析演示。 1- 请向我推荐最好的调试器工具,并且 2- 如何使用调试器工
我在 AWS 上安装了 Kaa Sandbox,在日志附加程序中使用默认值“localhost”和端口“27017”。这是正确的吗? 现在为“我的第一个 kaa 应用程序”运行 Java SDK 在
我从 git 克隆 kaa 源代码,并在我的 ubuntu 14.04 上成功构建并运行它。然后我也成功创建了kaa admin。 然后我将我的外发电子邮件设置设置为这样 SMTP 协议(protoc
如何在不集成第三方数据分析工具(如Spark,Hadoop)的情况下在KAA服务器中实现条件规则引擎? 是否可以在服务器端分析和过滤配置/事件模式,并且仅在条件匹配时才发送通知? 我找到了一些有关此问
我按照this document构建了ESP8266 SDK 但是编译报告显示以下错误。 [ 35%] Building C object kaa/CMakeFiles/extension_notif
我已经设置了一个 Kaa 服务器并使用 SDK 开发了一个应用程序。但应用程序不发送事件消息。此应用程序应将进入 parking 场的汽车的车牌发送到服务器,并将事件发送到另一个应用程序(接收器应用程
我想控制端点(Raspberry pi 3)的GPIO。 我尝试将两个 KAA 演示应用程序合并为一个。 (“Cassandra 数据分析”和“数据收集”) 由于 Raspberry Pi 只有一个演
我正在尝试在我的树莓派上构建一个C应用程序以将日志发送到kaa服务器,我正在遵循官方网站上的C文档。在使用 java 之前我已经成功地做到了这一点,但现在我尝试用 C 来做同样的应用程序。这是我的代码
编译 C++ SDK 时出现以下错误** 错误日志 ** fatal error :kaa/gen/EndpointGen.hpp:没有这样的文件或目录[ 1% ] 构建 CXX 对象 kaa/CMa
我想使用在虚拟机中给我们的 ssh kaa@127.0.0.1 -p 2222 ssh 进入 Kaa 的沙箱,在其中一个数据收集演示中它说我们需要ssh 进入 kaa 的沙箱,然后我们可以使用演示的应
我尝试使用 Kaa Sandbox(curl 命令和 UI)使用 Json 文件发送通知。 我的问题是: 当我使用 json 文件时,为什么不在客户端端点显示消息正文(通知演示(JAVA SDK)?!
我使用 Kaa 沙盒发送通知。 我必须在窗口终端上运行这些代码: curl -v -S -u devuser:devuser123 -F 'notification={"applicationId":
我正在尝试将日志模式从树莓派 C 应用程序发送到后端 kaa 服务器。这是架构 { "type" : "record", "name" : "RemoteSensorLog", "namespace"
我想“卡住”(即创建可自执行的、自包含的包)Kaa 编辑器。 (原因:只在python3.3+上运行,但是我的生产服务器有python2.7和python3.2,我不想改) 运行kaa的主要脚本是什么
我想使用原始 TCP 将事件发送到 Kaa 平台,我不想为此使用生成的 SDK,所以我想问一下有什么办法可以做到这一点吗?我在哪里可以找到在没有 SDK 的情况下手动使用 Kaa TCP 协议(pro
我正在尝试在树莓派 3 上构建一个 C 应用程序,它收集一些传感器读数并将它们记录到 mongodb 日志附加程序中。我面临应用程序的非常奇怪的行为 这是我的应用程序代码,从主函数调用 #includ
我想使用 java SDK 构建一个 kaa actor 网关。执行器应处理来自不同端点(温度传感器 - 湿度传感器 - ...)的数据,并将其数据记录到 kaa 平台。如何做到这一点我应该从管理控制
我正在使用 KAA iOT 服务器将我的硬件与云连接。我已经在硬件中实现了 MQTT 协议(protocol),并且需要实现 Actor Gateway 或其他解决方案来实现硬件和云之间的通信。我无法
因此,我正在使用 Java SDK 遵循“您的第一个 Kaa 应用程序”教程,一切都很顺利,直到构建应用程序为止。因此,当我尝试运行该应用程序时,出现以下错误。 > C:\Temp\demo_app>
我是一名优秀的程序员,十分优秀!