新大陸云平臺篇
- 簡介
- 代碼分析
- 全部代碼
簡介
主要功能:溫濕度傳感器,燈,風扇與網關ZIGBBE自組網,然后網關將資料上傳至云平臺,上位機程式(android)通過云平臺實時獲取資料
1:獲取溫濕度資料
2:控制風扇,燈
3:如果實時獲取的溫度大于了一定數值自動開啟風扇,如果小于一定陣列自動開啟燈
4:輸入的溫度大于了一定數值自動開啟風扇,如果小于一定數值自動開啟燈
代碼分析
首先連接云平臺,進行登陸,獲取訪問令牌
ConnectCloud.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
netWorkBusiness.signIn( new SignIn( UserName, PassWord ), new NCallBack<BaseResponseEntity<User>>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity<User> response) {
}
@Override
public void onResponse(Call<BaseResponseEntity<User>> call, Response<BaseResponseEntity<User>> response) {
BaseResponseEntity<User> body = response.body();
if (body != null){
if (body.getStatus() == 0){
AccessToken = body.getResultObj().getAccessToken();
if (AccessToken == null){
Toast.makeText( MainActivity.this,"訪問令牌為空",Toast.LENGTH_SHORT ).show();
return;
}
netWorkBusiness = new NetWorkBusiness( AccessToken, Url);
}
}
}
} );
}
} );
開啟子執行緒,實時獲取溫度資料,
并通過runOnUiThread從子執行緒跳轉到主執行緒,更新UI,下面采用的是lamda寫法,
thread = new Thread( ()->{
while (true){
/**while start*/
try{
Thread.sleep( 2000 );
}catch (InterruptedException e){
e.printStackTrace();
}
/**獲取溫度資料開始*/
netWorkBusiness.getSensors( DeviceID, TmpTag, new NCallBack<BaseResponseEntity<List<SensorInfo>>>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity<List<SensorInfo>> response) {
}
@Override
public void onResponse(Call<BaseResponseEntity<List<SensorInfo>>> call, Response<BaseResponseEntity<List<SensorInfo>>> response) {
BaseResponseEntity<List<SensorInfo>> body = response.body();
if (body != null){
if (body.getStatus() == 0){
TmpValue = Double.parseDouble( body.getResultObj().get( 0 ).getValue() );
}
}
}
} );
/**獲取溫度資料結束*/
/**改變溫度的值*/
runOnUiThread( ()->{
Tmp.setText( TmpValue+" ℃" );
} );
/**改變溫度的值*/
打開風扇和燈通過新大陸JAR包中的control方法
/**
* 發送命令/控制設備
*
* @param deviceId 設備ID(必填)
* @param apiTag 傳感標識名(必須但值可為空)
* @param data 開關類:開=1,關=0,暫停=2
* 家居類:調光燈亮度=0~254,RGB燈色度=2~239,窗簾、卷閘門、幕布打開百分比=3%~100%,紅外指令=1(on)2(off)
* 其它:integer/float/Json/String型別值
*/
OpenFan.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Fan.startAnimation( Rotate );
netWorkBusiness.control( DeviceID, FanTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity response) {
Toast.makeText( MainActivity.this,"打開風扇",Toast.LENGTH_SHORT ).show();
}
} );
}
} );
當硬體風扇選擇時,對應的上位機程式風扇影片
private void InitAnimation(){
Rotate = AnimationUtils.loadAnimation( MainActivity.this,R.anim.rotate );
Rotate.setDuration(1000);
//animation.setRepeatCount(-1); //無限旋轉
Rotate.setRepeatMode(1);
Rotate.setFillAfter(true);
CycleInterpolator interpolator = new CycleInterpolator(1);
Rotate.setInterpolator(interpolator);
}
全部代碼
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
InitView();
GetData();
InitAnimation();
InputTmpOk.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
String GetEditTextTmpValue = InputTmp.getText().toString();
int IntTmpValue = Integer.parseInt( GetEditTextTmpValue );
if (IntTmpValue < 0){
Toast.makeText( MainActivity.this,"溫度不能小于0",Toast.LENGTH_SHORT ).show();
return;
}
if (IntTmpValue > 40){
Toast.makeText( MainActivity.this,"溫度不能大于40",Toast.LENGTH_SHORT ).show();
return;
}
ControlFan(IntTmpValue);
}
} );
ButtonOpenLamp.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
CloseLamp.setVisibility( View.INVISIBLE );
OpenLamp.setVisibility( View.VISIBLE );
netWorkBusiness.control( DeviceID, LightTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity response) {
Toast.makeText( MainActivity.this,"開燈",Toast.LENGTH_SHORT ).show();
}
} );
}
} );
ButtonCloseLamp.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
CloseLamp.setVisibility( View.VISIBLE );
OpenLamp.setVisibility( View.INVISIBLE );
netWorkBusiness.control( DeviceID, LightTag, 0, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity response) {
Toast.makeText( MainActivity.this,"關燈",Toast.LENGTH_SHORT ).show();
}
} );
}
} );
OpenFan.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Fan.startAnimation( Rotate );
netWorkBusiness.control( DeviceID, FanTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity response) {
Toast.makeText( MainActivity.this,"打開風扇",Toast.LENGTH_SHORT ).show();
}
} );
}
} );
CloseFan.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Fan.clearAnimation();
netWorkBusiness.control( DeviceID, FanTag, 0, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity response) {
Toast.makeText( MainActivity.this,"關閉風扇",Toast.LENGTH_SHORT ).show();
}
} );
}
} );
}
private void InitView(){
Tmp = findViewById( R.id.Tmp );
Hum = findViewById( R.id.Hum );
InputTmp = findViewById( R.id.InputTmp );
InputTmpOk = findViewById( R.id.InputOk );
ConnectCloud = findViewById( R.id.ConnectCloud );
CloseLamp = findViewById( R.id.LampClose );
OpenLamp = findViewById( R.id.LampOpen );
ButtonOpenLamp = findViewById( R.id.ButtonOpenLamp );
ButtonCloseLamp = findViewById( R.id.ButtonCloseLamp );
Fan = findViewById( R.id.Fan );
OpenFan = findViewById( R.id.OpenFan );
CloseFan= findViewById( R.id.CloseFan );
}
private void InitAnimation(){
Rotate = AnimationUtils.loadAnimation( MainActivity.this,R.anim.rotate );
Rotate.setDuration(1000);
//animation.setRepeatCount(-1); //無限旋轉
Rotate.setRepeatMode(1);
Rotate.setFillAfter(true);
CycleInterpolator interpolator = new CycleInterpolator(1);
Rotate.setInterpolator(interpolator);
}
private void GetData(){
/**登陸開始*/
ConnectCloud.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
netWorkBusiness.signIn( new SignIn( UserName, PassWord ), new NCallBack<BaseResponseEntity<User>>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity<User> response) {
}
@Override
public void onResponse(Call<BaseResponseEntity<User>> call, Response<BaseResponseEntity<User>> response) {
BaseResponseEntity<User> body = response.body();
if (body != null){
if (body.getStatus() == 0){
AccessToken = body.getResultObj().getAccessToken();
if (AccessToken == null){
Toast.makeText( MainActivity.this,"訪問令牌為空",Toast.LENGTH_SHORT ).show();
return;
}
netWorkBusiness = new NetWorkBusiness( AccessToken, Url);
}
}
}
} );
}
} );
/**登陸結束*/
thread = new Thread( ()->{
while (true){
/**while start*/
try{
Thread.sleep( 2000 );
}catch (InterruptedException e){
e.printStackTrace();
}
/**獲取溫度資料開始*/
netWorkBusiness.getSensors( DeviceID, TmpTag, new NCallBack<BaseResponseEntity<List<SensorInfo>>>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity<List<SensorInfo>> response) {
}
@Override
public void onResponse(Call<BaseResponseEntity<List<SensorInfo>>> call, Response<BaseResponseEntity<List<SensorInfo>>> response) {
BaseResponseEntity<List<SensorInfo>> body = response.body();
if (body != null){
if (body.getStatus() == 0){
TmpValue = Double.parseDouble( body.getResultObj().get( 0 ).getValue() );
}
}
}
} );
/**獲取溫度資料結束*/
/**改變溫度的值*/
runOnUiThread( ()->{
Tmp.setText( TmpValue+" ℃" );
} );
/**改變溫度的值*/
/**獲取濕度資料開始*/
netWorkBusiness.getSensors( DeviceID, HumTag, new NCallBack<BaseResponseEntity<List<SensorInfo>>>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity<List<SensorInfo>> response) {
}
@Override
public void onResponse(Call<BaseResponseEntity<List<SensorInfo>>> call, Response<BaseResponseEntity<List<SensorInfo>>> response) {
BaseResponseEntity<List<SensorInfo>> entity = response.body();
if (entity != null){
if (entity.getStatus() == 0){
HumValue = Double.parseDouble( entity.getResultObj().get( 0 ).getValue() );
}
}
}
} );
/**獲取濕度資料結束*/
/**改變濕度的值*/
runOnUiThread( ()->{
Hum.setText( HumValue+" RH" );
} );
/**改變濕度的值*/
/**while end*/
}
} );
thread.start();
}
/**如果大于規定溫度,開啟風扇*/
private void ControlFan(int GetTmpValue){
if (GetTmpValue > MaxTmpValue){
netWorkBusiness.control( DeviceID, LightTag, 1, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity response) {
}
@Override
public void onResponse(Call<BaseResponseEntity> call, Response<BaseResponseEntity> response) {
Toast.makeText( MainActivity.this,"風扇已經開啟",Toast.LENGTH_SHORT ).show();
}
} );
}else if (GetTmpValue< MInTmpValue){
netWorkBusiness.control( DeviceID, LightTag, 0, new NCallBack<BaseResponseEntity>(getApplicationContext()) {
@Override
protected void onResponse(BaseResponseEntity response) {
}
@Override
public void onResponse(Call<BaseResponseEntity> call, Response<BaseResponseEntity> response) {
Toast.makeText( MainActivity.this,"風扇已經關閉",Toast.LENGTH_SHORT ).show();
}
} );
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/280224.html
標籤:其他
