KAA平台单节点部署安装(kaa-node-0.11.0)
原创 年少_
最后发布于2019-08-20 18:12:29
阅读数 201 收藏
发布于2019-08-20 18:12:29
展开
KAA平台系列文章:
- KAA平台单节点部署安装(kaa-node-0.10.0)
- KAA平台的配置使用
- KAA平台的数据上传
- KAA平台数据下发的四种方式
文章目录
- KAA官网:
- 整体架构:
- KAA安装及配置
- 1.JDK 1.8.0_211
- 2.MariaDB 5.5(CentOS-7以下需安装,7内置)
- 3.Zookeeper 3.4.6
- 4.MongoDB 4.0.10
- 5.KAA
- 1)安装
- 2)检查MariaDB用户名和密码在服务器配置文件中是否有效。
- 3)更改启动用户
- 4)更给内部通信ip地址:
- KAA启动及常用命令
- 1)Zookeeper
- 2)MongoDB(必须)
- 3)KAA
- 4)其他
- 平台地址:http://***:8080/kaaAdmin
KAA官网:
https://kaaproject.github.io/kaa/docs/v0.10.0/Welcome/
整体架构:
CentOS7 + JDKjdk1.8.0_211 + zookeeper 3.4.6 + MongoDB 4.0.10 + kaa-node-0.10.0-SNAPSHOT20170816065203.noarch.rpm
KAA安装及配置
1.JDK 1.8.0_211
解压:tar -zxvf jdk.tar.gz -C /usr/local/
配置:vim /etc/profile
#my srttings
export JAVA_HOME=/usr/local/jdk1.8.0_211
export PATE=$PATH:$JAVA_HOME/bin:
source /etc/profile
错误:source /etc/profile -提示找不到命令
试试:A)locate source /etc/profile
试试:B)usr/bin/source /etc/profile
2.MariaDB 5.5(CentOS-7以下需安装,7内置)
仅参考:
检查是否安装了mariadb组件:
rpm -qa | grep -i mariadb
删除组件
rpm -ev 组件名
rpm -ivh MariaDB-5.5.47-centos7-x86_64-server.rpm
rpm -ivh MariaDB-5.5.47-centos7-x86_64-client.rpm
mysql -uroot -p
创建kaa数据库
CREATE DATABASE kaa CHARACTER SET utf8 COLLATE utf8_general_ci;
3.Zookeeper 3.4.6
tar -zxvf ./AppPackage/zookeeper-3.4.6.tar.gz -C ./
创建zoo.cfg
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.6/data
dataLogDir=/usr/local/zookeeper-3.4.6/logs
clientPort=2181
配置环境变量
4.MongoDB 4.0.10
解压:
tar -zxvf ./AppPackage/mongodb-linux-x86_64-4.0.10.tgz -C ./
启动:
./bin/mongod --dbpath /data/db
./mongo KAA
5.KAA
官网安装文档:
http://kaaproject.github.io/kaa/docs/v0.10.0/Administration-guide/System-installation/
1)安装
检查是否安装了kaa-node组件:
rpm -qa | grep -i 组件名
删除组件
rpm -ev 组件名
安装
rpm –ivh 组件名
2)检查MariaDB用户名和密码在服务器配置文件中是否有效。
$ cat /etc/kaa-node/conf/admin-dao.properties | grep jdbc_username
jdbc_username=sqladmin
$ cat /etc/kaa-node/conf/admin-dao.properties | grep jdbc_password
jdbc_password=admin
$ cat /etc/kaa-node/conf/sql-dao.properties | grep jdbc_username
jdbc_username=sqladmin
$ cat /etc/kaa-node/conf/sql-dao.properties | grep jdbc_password
jdbc_password=admin
如果密码或用户名不匹配,请编辑配置文件。
$ sudo vim /etc/kaa-node/conf/admin-dao.properties
$ sudo vim /etc/kaa-node/conf/sql-dao.properties
3)更改启动用户
默认需要kaa用户启动
进入:cd /usr/lib/kaa-node/bin
解决:更改vim ./bin/kaa-node
4)更给内部通信ip地址:
修改地址为:“localhost”–>”192.168.0.110” 本机地址 192.168.0.110
cd /etc/kaa-node/conf
vim kaa-node.properties
KAA启动及常用命令
启动顺序:Zookeeper --> MongoDB --> KAA
1)Zookeeper
./zkServer.sh start
./zkServer.sh stop
./zkServer.sh status
2)MongoDB(必须)
启动: ./mongod --dbpath /data/db
启动客户端: ./bin/mongo
show dbs;
show collections;
mongo kaa
use kaa
db.yourColl.count();
db.logs_24473266966962431201.find();
db.userInfo.getDB();
db.userInfo.dataSize();
可参考
3)KAA
cd /usr/lib/kaa-node/bin
./kaa-node start
tail -100f /var/log/kaa/kaa-node.log
4)其他
whereis kaa-node
chmod +x *.sh
echo "" > *.log
cat /var/log/kaa/* | grep ERROR
clear
平台地址:http://***:8080/kaaAdmin
账号:kaa
密码:kaa123
KAA平台的配置使用
原创 年少_
最后发布于2019-08-21 14:21:54
阅读数 504 收藏
发布于2019-08-21 14:21:54
展开
KAA平台系列文章:
- KAA平台单节点部署安装(kaa-node-0.10.0)
- KAA平台的配置使用
- KAA平台的数据上传
- KAA平台数据下发的四种方式
文章目录
- KAA平台地址及账号数据
- KAA平台的使用(以“温度计量”为例)
- KAA管理员
- 1.常规配置
- 2.传出电子邮件设置
- 3.租户:WDJL_SUN
- 租户管理员
- 1.应用程序
- 2.租户用户
- 3.租户开发商
- 4.租户CTL
- com.zht.cn.NotificationPoint
- com.zht.cn.TerminalMeasurement
- 租户用户
- 1.SDK配置文件
- 2.Schemas
- a) 客户端EP配置文件:默认即可
- b) 服务器端EP配置文件:默认即可
- c) 配置:默认即可
- d) 通知
- e) Log
- 3.通知主题
- 4.端点组
- 5.事件族映射:没有使用
- 6.日志追踪器
- 7.用户验证器:没有使用
- 8.用户:没有使用
- 9.端点配置文件
- 10.应用程序CTL:没有使用
- 11.租户CTL:默认即可
KAA平台地址及账号数据
平台地址:
http://192.168.0.110:8080/kaaAdmin
KAA平台管理员:
- KAA管理员账号:kaa
- KAA管理员密码:kaa123
1. 末端计量:
: a) 租户名称:MDJL_PLC
b) 租户管理员:MDJL_PLC
c) 租户用户:MDJL_DEV
2. 温度计量:
: a) 租户名称:WDJL_SUN
b) 租户管理员:WDJL_SUN
c) 租户开发商:WDJL_SKF
d) 租户用户:WDJL_SYH
KAA平台的使用(以“温度计量”为例)
KAA管理员
1.常规配置
2.传出电子邮件设置
注意:qq邮箱需要开启SMTP,否则不能发送邮件。
3.租户:WDJL_SUN
添加租户并创建租户管理员账号
租户管理员
1.应用程序
注意:凭据服务:Trustful
2.租户用户
3.租户开发商
4.租户CTL
com.zht.cn.NotificationPoint
com.zht.cn.TerminalMeasurement
这里示例4个
租户用户
1.SDK配置文件
生成SDK前提条件是配置好 Schemas(通知、Log),通知主题,端点组,日志追加器。
2.Schemas
a) 客户端EP配置文件:默认即可
b) 服务器端EP配置文件:默认即可
c) 配置:默认即可
d) 通知
配置下发通知具体参数类型
选择现有类型:即选择 “租户管理员” 创建的 “租户CTL”。
每次添加新架构时,Kaa都会为其分配新的版本号。
e) Log
具体的上传参数,该属性需要和各个公司来定
3.通知主题
该功能配置之后,可以下发通知给终端
创建一个ALL通知即可
注:强制性√
4.端点组
选择并添加 通知主题 到端点组
5.事件族映射:没有使用
6.日志追踪器
各公司上传数据保存所使用的数据库
由于该平台以及数据库部署在同一服务器,所以MongoDB参数设置为localhost即可
7.用户验证器:没有使用
8.用户:没有使用
9.端点配置文件
当SDK被终端所使用,就会生成该SDK所对应的键哈希,
不删除键哈希,无法删除SDK,防止终端使用的SDK被删除。
10.应用程序CTL:没有使用
11.租户CTL:默认即可
KAA平台的数据上传
原创 年少_
最后发布于2019-08-21 14:42:23
阅读数 197 收藏
发布于2019-08-21 14:42:23
展开
KAA平台系列文章:
- KAA平台单节点部署安装(kaa-node-0.10.0)
- KAA平台的配置使用
- KAA平台的数据上传
- KAA平台数据下发的四种方式
文章目录
- KAA平台的数据上传
- 1.生成SDK
- 2.客户端应用代码编写
- a) 为您的操作系统安装Oracle JDK 8。
- b) 创建一个demo_app目录,创建Java程序,并编写代码,
- c)创建lib,放入jar包
- d)启动程序
- 3.检索收集的数据:
- a) 应用程序页面复制应用令牌;
- b) 进入mongodb客户端:
KAA平台的数据上传
官网
1.生成SDK
1)在“ 应用程序”列表中选择新应用程序,然后单击“ 生成SDK”按钮。
2) 在Generate SDK窗口中,选择SDK的目标平台,然后单击Generate SDK。
2.客户端应用代码编写
a) 为您的操作系统安装Oracle JDK 8。
b) 创建一个demo_app目录,创建Java程序,并编写代码,
官方代码示例:
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.configuration.base.ConfigurationListener;
import org.kaaproject.kaa.client.configuration.base.SimpleConfigurationStorage;
import org.kaaproject.kaa.client.logging.strategies.RecordCountLogUploadStrategy;
import org.kaaproject.kaa.schema.sample.Configuration;
import org.kaaproject.kaa.schema.sample.DataCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
-
Class implement functionality for First Kaa application. Application send temperature data
-
from the Kaa endpoint with required configured sampling period
*/
public class FirstKaaDemo {
private static final long DEFAULT_START_DELAY = 1000L;
private static final Logger LOG = LoggerFactory.getLogger(FirstKaaDemo.class);
private static KaaClient kaaClient;
private static ScheduledFuture<?> scheduledFuture;
private static ScheduledExecutorService scheduledExecutorService;
public static void main(String[] args) {
LOG.info(FirstKaaDemo.class.getSimpleName() + " app starting!");
scheduledExecutorService = Executors.newScheduledThreadPool(1);
DesktopKaaPlatformContext desktopKaaPlatformContext = new DesktopKaaPlatformContext();
kaaClient = Kaa.newClient(desktopKaaPlatformContext, new FirstKaaClientStateListener(), true);
RecordCountLogUploadStrategy strategy = new RecordCountLogUploadStrategy(1);
strategy.setMaxParallelUploads(1);
kaaClient.setLogUploadStrategy(strategy);
kaaClient.setConfigurationStorage(new SimpleConfigurationStorage(desktopKaaPlatformContext, "saved_config.cfg"));
kaaClient.addConfigurationListener(new ConfigurationListener() {
@Override
public void onConfigurationUpdate(Configuration configuration) {
LOG.info("Received configuration data. New sample period: {}", configuration.getSamplePeriod());
onChangedConfiguration(TimeUnit.SECONDS.toMillis(configuration.getSamplePeriod()));
}
});
kaaClient.start();
LOG.info("--= Press any key to exit =--");
try {
System.in.read();
} catch (IOException e) {
LOG.error("IOException has occurred: {}", e.getMessage());
}
LOG.info("Stopping...");
scheduledExecutorService.shutdown();
kaaClient.stop();
}
- Method, that emulate getting temperature from real sensor.
- Retrieves random temperature.
*/
private static int getTemperatureRand() {
return new Random().nextInt(10) + 25;
}
private static void onKaaStarted(long time) {
if (time <= 0) {
LOG.error(“Wrong time is used. Please, check your configuration!”);
kaaClient.stop();
System.exit(0);
}
scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
int temperature = getTemperatureRand();
kaaClient.addLogRecord(new DataCollection(temperature));
LOG.info("Sampled Temperature: {}", temperature);
}
}, 0, time, TimeUnit.MILLISECONDS);
}
private static void onChangedConfiguration(long time) {
if (time == 0) {
time = DEFAULT_START_DELAY;
}
scheduledFuture.cancel(false);
scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
int temperature = getTemperatureRand();
kaaClient.addLogRecord(new DataCollection(temperature));
LOG.info("Sampled Temperature: {}", temperature);
}
}, 0, time, TimeUnit.MILLISECONDS);
}
private static class FirstKaaClientStateListener extends SimpleKaaClientStateListener {
@Override
public void onStarted() {
super.onStarted();
LOG.info("Kaa client started");
Configuration configuration = kaaClient.getConfiguration();
LOG.info("Default sample period: {}", configuration.getSamplePeriod());
onKaaStarted(TimeUnit.SECONDS.toMillis(configuration.getSamplePeriod()));
}
@Override
public void onStopped() {
super.onStopped();
LOG.info("Kaa client stopped");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
湿度计量代码示例:
import com.zhyh.cn.NotificationPoint;
import com.zhyh.cn.TerminalMeasurement;
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.configuration.base.ConfigurationListener;
import org.kaaproject.kaa.client.configuration.base.SimpleConfigurationStorage;
import org.kaaproject.kaa.client.logging.strategies.RecordCountLogUploadStrategy;
import org.kaaproject.kaa.client.notification.NotificationListener;
import org.kaaproject.kaa.common.endpoint.gen.Topic;
import org.kaaproject.kaa.schema.system.EmptyData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
-
Class implement functionality for First Kaa application. Application send temperature data
-
from the Kaa endpoint with required configured sampling period
*/
public class FirstKaaDemo {
private static final long DEFAULT_START_DELAY = 1000L;
private static final Logger LOG = LoggerFactory.getLogger(FirstKaaDemo.class);
private static KaaClient kaaClient;
private static ScheduledFuture<?> scheduledFuture;
private static ScheduledExecutorService scheduledExecutorService;
public static void main(String[] args) {
System.out.println(FirstKaaDemo.class.getSimpleName() + " app starting!");
scheduledExecutorService = Executors.newScheduledThreadPool(1);
DesktopKaaPlatformContext desktopKaaPlatformContext = new DesktopKaaPlatformContext();
kaaClient = Kaa.newClient(desktopKaaPlatformContext, new FirstKaaClientStateListener(), true);
RecordCountLogUploadStrategy strategy = new RecordCountLogUploadStrategy(1);
strategy.setMaxParallelUploads(1);
kaaClient.setLogUploadStrategy(strategy);
kaaClient.setConfigurationStorage(new SimpleConfigurationStorage(desktopKaaPlatformContext, "saved_config.cfg"));
kaaClient.addConfigurationListener(
new ConfigurationListener() {
public void onConfigurationUpdate(EmptyData configuration) {
System.out.println("Received configuration data. New sample period: {}" + configuration.get(1));
}
}
@Override
public void onConfigurationUpdate(Configuration configuration) {
System.out.println("Received configuration data. New sample period: {}", configuration.getSamplePeriod());
onChangedConfiguration(TimeUnit.SECONDS.toMillis(configuration.getSamplePeriod()));
}
}*/
);
kaaClient.addNotificationListener(new NotificationListener() {
@Override
public void onNotification(long topicId, NotificationPoint notification) {
System.err.println("1111111111111111111111111" + topicId + notification.getMessage());
}
});
kaaClient.start();
List<Topic> topics = kaaClient.getTopics();
for (Topic topic : topics) {
System.out.printf("Id: %s, name: %s, type: %s"
, topic.getId(), topic.getName(), topic.getSubscriptionType());
}
System.out.println("--= Press any key to exit =--");
try {
System.in.read();
} catch (IOException e) {
LOG.error("IOException has occurred: {}", e.getMessage());
}
System.out.println("Stopping...");
scheduledExecutorService.shutdown();
kaaClient.stop();
}
private static int getTemperatureRand() {
return new Random().nextInt(110) + 1125;
}
private static void onKaaStarted(long time) {
if (time <= 0) {
LOG.error("Wrong time is used. Please, check your configuration!");
kaaClient.stop();
System.exit(0);
}
scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(
new Runnable() {
public void run() {
for (int i = 0; i < 10000; i++) {
int temperature = getTemperatureRand();
TerminalMeasurement record = new TerminalMeasurement("0909",""+temperature,""+temperature,"EPID001");
kaaClient.addLogRecord(record);
System.out.println("Sampled Temperature: {}" + temperature);
}
}
}, 0, time, TimeUnit.MILLISECONDS);
}
private static class FirstKaaClientStateListener extends SimpleKaaClientStateListener {
@Override
public void onStarted() {
super.onStarted();
System.out.println("Kaa client started");
EmptyData configuration = kaaClient.getConfiguration();
onKaaStarted(TimeUnit.SECONDS.toMillis(1000));
}
@Override
public void onStopped() {
super.onStopped();
System.out.println("Kaa client stopped");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
c)创建lib,放入jar包
SDK + slf4j
下载slf4j-simple-1.7.21.jar 地址:
http://central.maven.org/maven2/org/slf4j/slf4j-simple/1.7.21/slf4j-simple-1.7.21.jar
d)启动程序
3.检索收集的数据:
a) 应用程序页面复制应用令牌;
b) 进入mongodb客户端:
./mongo kaa
show dbs;
show collections;
db.logs_15464214871215164.count();
db.logs_15464214871215164.find();
db.notification.find()
KAA平台数据下发的四种方式
原创 年少_
最后发布于2019-08-21 15:32:02
阅读数 128 收藏
发布于2019-08-21 15:32:02
展开
KAA平台系列文章:
- KAA平台单节点部署安装(kaa-node-0.10.0)
- KAA平台的配置使用
- KAA平台的数据上传
- KAA平台数据下发的四种方式
文章目录
- 一、网页形式
- 二、脚本形式
- 三、Postman
- 四、JAVA代码
一、网页形式
官网:http://kaaproject.github.io/kaa/docs/v0.10.0/Programming-guide/Key-platform-features/Notifications/
配置: 通知 --> 通知主题 --> 端点组,即可在“通知主题”下发通知
注:代码见KAA平台的数据上传
二、脚本形式
接口地址:
http://192.168.0.110:8080/kaaAdmin/rest/api/sendUnicastNotification
得到通知模式的schema_id: db.notification.find()
授权: chmod +x *.sh
其他数据在MariaDB数据库获取
1262358.sh
curl -v -S -u WDJL_SYH:kaa123 -F 'notification={"applicationId":"131072","schemaId":"163845","topicId":"98304","type":"USER"};
type=application/json' -F 'endpointKeyHash=74xdPqVyQZ0eLmrLSj2P2Q8kPfo=;
type=text/plain' -F file=@/usr/local/S/168369519.json
"http://192.168.0.110:8080/kaaAdmin/rest/api/sendUnicastNotification"
1262358.json
{"Message": "fn:24,seq:1502097735986,type:request,du:[{epid:31431793435902E0,controlType:1},
{epid:31431793435902E1,controlType:1}]"}
123.json
{"Message": "下发消息:12345,上山打老虎。"}
三、Postman
接口地址:
http://192.168.0.110:8080/kaaAdmin/rest/api/sendUnicastNotification
四、JAVA代码