Beruflich Dokumente
Kultur Dokumente
Here an android application is developed for consumers, so that they can login to it using a
consumer id and password provided by the administrator. The Consumer can request the
meter readings by simply pressing a button and capturing image in the android application.
The bill amount to be paid for power consumption is automatically generated in the App. The
consumer is provided with the facility to remote disconnect and reconnect to mains. Another
feature is that; the consumer can make the online payment of electricity bill through the App.
Server Module
Energy provider side is a web portal where the administrator can add users, update cost per
unit, filter unpaid users, cut the power supply. The administrator assigns a user id and pass-
word for the user for accessing the mobile application. The readings from the energy meter
will be updated in the energy provider server with the help of user module. After generating
bills, the admin can see the users with payment status. If they are not paid, then the
administrator can disconnect the power supply to the corresponding user by sending
Messages to the energy meter.
Bill Generation
The system designed reduces the efforts of manual data collection of energy meter. Also, data
which is received at service provider side is easy to manipulate for bill generation and other
such tasks. With this system we can collect the reading as well as control the supply to the
user. With addition of software at service provider side, the customer can be informed of
current meter reading, bill for current cycle, status of the line and other parameters to the
customer with message. The technology used in energy meter is expanding to the power
distribution transformers. So that we can cut the power supply from anywhere in case of any
emergency or maintenance, find areas with power distribution failure.
Architecture
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.smartmeter.R;
import com.example.smartmeter.model.UserData;
import com.example.smartmeter.utils.CommonUtils;
import com.example.smartmeter.utils.DatabaseUtils;
import com.example.smartmeter.utils.LogUtils;
import com.example.smartmeter.utils.PreferenceUtils;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import butterknife.BindView;
import butterknife.ButterKnife;
@BindView(R.id.til_username)
TextInputLayout til_username;
@BindView(R.id.til_password)
TextInputLayout til_password;
@BindView(R.id.ed_username)
EditText ed_user_name;
@BindView(R.id.ed_password)
EditText ed_password;
@BindView(R.id.btn_login)
Button btn_login;
@BindView(R.id.llay_forget_password)
LinearLayout llay_forget_password;
@BindView(R.id.llay_register)
LinearLayout llay_register;
@BindView(R.id.tv_new_user)
TextView tv_new_user;
@BindView(R.id.tv_user)
TextView tv_user;
@BindView(R.id.iv_sign)
ImageView iv_sign;
@BindView(R.id.tv_logo_instruction)
TextView tv_logo_instruction;
@BindView(R.id.llay_admin)
LinearLayout llay_admin;
Dialog dialog;
int REQUEST_PERMISSION_CAMERA=1;
Context context;
SharedPreferences prefs;
FirebaseDatabase database;
Bitmap bmSelected;
int LOGIN_TYPE=USER_LOGIN;
String strErrorMsg="";
String strSelectedQRCode="";
@Override
setContentView(R.layout.activity_login_screen);
try{
getSupportActionBar().hide();
ButterKnife.bind(this);
context = this;
database = FirebaseDatabase.getInstance();
tv_new_user.setPaintFlags(tv_new_user.getPaintFlags() |
Paint.UNDERLINE_TEXT_FLAG);
// til_username.setVisibility(View.GONE);
// til_password.setVisibility(View.VISIBLE);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
try{
if(LOGIN_TYPE==USER_LOGIN){
if (strSelectedQRCode.length()== 10 &&strPassword.length()>0 ) {
loginRequest(strSelectedQRCode, strPassword);
} else {
// if(selectedUri==null){
// tv_logo_instruction.setVisibility(View.VISIBLE);
// tv_logo_instruction.setText("Scan QR Code");
// tv_logo_instruction.setTextColor(Color.RED);
// }
if (strSelectedQRCode.length() !=10) {
tv_user.setTextColor(Color.RED);
if (strPassword.length() == 0) {
til_password.setError(getResources().getString(R.string.empty_validation_fiel
d));
}else{
if(strUserName.equals("admin")&&strPassword.equals("admin@123")){
PreferenceUtils.saveBoolean(PreferenceUtils.LOGIN_STATUS,true,pref
s);
PreferenceUtils.saveText(PreferenceUtils.USER_ID,"admin",prefs);
PreferenceUtils.saveText(PreferenceUtils.USER_CODE,"admin",prefs);
PreferenceUtils.saveText(PreferenceUtils.USER_NAME,"Admin",prefs);
String
strFcmToken=prefs.getString(PreferenceUtils.FCM_TOKEN,null);
sendFCMToken(strFcmToken,"admin");
CommonUtils.goNextScreen(LoginScreen.this, HomeScreen.class);
finish();
}else{
CommonUtils.showErrorToast(getResources().getString(R.string.invalid
Credentials),context);
} else {
if (strUserName.length() ==0) {
til_username.setError(getResources().getString(R.string.empty_validation_f
ield));
if (strPassword.length() == 0) {
til_password.setError(getResources().getString(R.string.empty_validation_fiel
d));
});
iv_sign.setOnClickListener(new View.OnClickListener() {
@Override
try{
goScanScreen();
LogUtils.printException(e);
});
llay_admin.setOnClickListener(new View.OnClickListener() {
@Override
try{
LOGIN_TYPE=ADMIN_LOGIN;
iv_sign.setVisibility(View.GONE);
tv_user.setVisibility(View.GONE);
tv_logo_instruction.setVisibility(View.GONE);
til_password.setVisibility(View.VISIBLE);
til_username.setVisibility(View.VISIBLE);
til_username.setHint("User name");
ed_user_name.setHint("User name");
LogUtils.printException(e);
}
}
});
// llay_forget_password.setOnClickListener(new View.OnClickListener() {
// @Override
// try{
// CommonUtils.goNextScreen(LoginScreen.this, ForgetPasswordScreen.class);
// LogUtils.printException(e);
// }
//
// }
// });
llay_register.setOnClickListener(new View.OnClickListener() {
@Override
try{
LogUtils.printException(e);
});
boolean isLogin=prefs.getBoolean(PreferenceUtils.LOGIN_STATUS,false);
if(isLogin){
String nUserType=prefs.getString(PreferenceUtils.USER_TYPE,null);
CommonUtils.goNextScreen(LoginScreen.this,HomeScreen.class);
finish();
LogUtils.printException(e);
}
private void goScanScreen(){
try {
if(isGranted){
strSelectedQRCode="";
startActivityForResult(i, REQUEST_CODE_SCAN);
LogUtils.printException(e);
/**
*/
CommonUtils.showProgress(context);
Query query=myRef.orderByChild("mobile").equalTo(strUsername);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
CommonUtils.hideProgress();
if (dataSnapshot.exists()) {
if(bd!=null){
if(bd.getMobile().equals(strUsername)&&bd.getPassword().equals(strPas
sword)){
try {
PreferenceUtils.saveBoolean(PreferenceUtils.LOGIN_STATUS,true
,prefs);
PreferenceUtils.saveText(PreferenceUtils.USER_ID,bd.getId(),prefs
);
PreferenceUtils.saveText(PreferenceUtils.USER_CODE,strUsernam
e,prefs);
PreferenceUtils.saveText(PreferenceUtils.USER_NAME,bd.getNam
e(),prefs);
PreferenceUtils.saveText(PreferenceUtils.ACCOUNT,
bd.getAccount(),prefs);
if(!bd.getId().equals("admin")){
String
strFcmToken=prefs.getString(PreferenceUtils.FCM_TOKEN,null);
sendFCMToken(strFcmToken,bd.getId());
CommonUtils.hideProgress();
CommonUtils.goNextScreen(LoginScreen.this, HomeScreen.class);
finish();
} catch(Exception e) {
LogUtils.printException(e);
}else{
CommonUtils.showErrorToast(getResources().getString(R.string.inval
idCredentials),context);
}else{
CommonUtils.showErrorToast(getResources().getString(R.string.invalid
Credentials),context);
}else{
CommonUtils.showErrorToast(getResources().getString(R.string.invalidCrede
ntials),context);
@Override
});
// Firebase ref = myRef.child(Firebas.CHILD_FLIGHTS);
// queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
// @Override
//
// }
// });
// myRef.addValueEventListener(new ValueEventListener() {
// @Override
// CommonUtils.hideProgress();
// UserData bd = dataSnapshot.getValue(UserData.class);
//
// }
//
// @Override
// LogUtils.e("DBError", "Error.....");
// }
// });
LogUtils.printException(e);
// try{
//
// try
// {
//
// imgA = ImageIO.read(fileA);
// imgB = ImageIO.read(fileB);
// }
// catch (IOException e)
// {
// System.out.println(e);
// }
//
// " mismatch");
// else
// {
// long difference = 0;
// {
// }
// }
//
//
// total_pixels;
//
// 255) * 100;
//
// System.out.println("Difference Percentage-->" +
// percentage);
// }
//
// LogUtils.printException(e);
// }
return 0;
try {
myRef.child("fcmToken").setValue(fcmtoken);
LogUtils.printException(e);
@Override
try{
if(requestCode==REQUEST_PERMISSION_CAMERA&&grantResults[0]==
PackageManager.PERMISSION_GRANTED){
goScanScreen();
LogUtils.printException(e);
}
@Override
try {
if (requestCode == REQUEST_CODE_SCAN&&resultCode==RESULT_OK) {
String id=data.getStringExtra("id");
if(id!=null){
strSelectedQRCode=id;
tv_user.setVisibility(View.VISIBLE);
tv_user.setText(strSelectedQRCode);
CommonUtils.showToast(strSelectedQRCode,context);
tv_user.setTextColor(Color.BLACK);
} catch (Exception e) {
LogUtils.printException(e);
}
}
package com.example.smartmeter.ui.activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.example.smartmeter.R;
import com.example.smartmeter.model.UserData;
import com.example.smartmeter.utils.CommonUtils;
import com.example.smartmeter.utils.DatabaseUtils;
import com.example.smartmeter.utils.LogUtils;
import com.example.smartmeter.utils.PreferenceUtils;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import butterknife.BindView;
import butterknife.ButterKnife;
Context context;
SharedPreferences prefs;
@BindView(R.id.til_name)
TextInputLayout til_name;
@BindView(R.id.ed_name)
EditText ed_name;
@BindView(R.id.til_mobile)
TextInputLayout til_mobile;
@BindView(R.id.ed_mobile)
EditText ed_mobile;
@BindView(R.id.til_password)
TextInputLayout til_password;
@BindView(R.id.ed_password)
EditText ed_password;
@BindView(R.id.til_id)
TextInputLayout til_id;
@BindView(R.id.ed_id)
EditText ed_id;
@BindView(R.id.btn_register)
Button btnRegister;
FirebaseDatabase database;
int isMobileNumberAvailable=0;
int isAccountAvailable=0;
long createdTime=0;
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration_screen);
try{
ButterKnife.bind(this);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
context=this;
prefs=getSharedPreferences(PreferenceUtils.PREF_NAME,MODE_PRIVATE);
database = FirebaseDatabase.getInstance();
getSupportActionBar().setTitle(getResources().getString(R.string.sign_up));
btnRegister.setText(getResources().getString(R.string.sign_up));
btnRegister.setOnClickListener(new View.OnClickListener() {
@Override
try{
if (strId.length()==10&&isAccountAvailable==0&&strName.length() > 0
&& strMobile.length() > 0&&isMobileNumberAvailable==0 && strMobile.length()==10
&&strPassword.length()>0&&CommonUtils.isValidPassword(strPassword)) {
registerRequest(strId,strName,strMobile,strPassword);
} else {
if (strName.length() == 0) {
til_name.setError(getResources().getString(R.string.empty_validation_fie
ld));
}
if (strId.length() != 10) {
til_id.setError(getResources().getString(R.string.id_validation_field));
}else if(isAccountAvailable==1){
til_id.setError(getResources().getString(R.string.alreadyExist));
if (strMobile.length() == 0) {
til_mobile.setError(getResources().getString(R.string.empty_validation_f
ield));
}else if(strMobile.length()!=10 ){
til_mobile.setError(getResources().getString(R.string.valid_mobile));
}else if(isMobileNumberAvailable==1){
til_mobile.setError(getResources().getString(R.string.mobile_already_exi
st));
if (strPassword.length() == 0) {
til_password.setError(getResources().getString(R.string.empty_validation
_field));
}else if(!CommonUtils.isValidPassword(strPassword)){
til_password.setError(getResources().getString(R.string.valid_password_
error));
LogUtils.printException(e);
});
ed_mobile.addTextChangedListener(new TextWatcher() {
@Override
@Override
if(CommonUtils.isValid(ed_mobile)){
til_mobile.setError(null);
handler.removeCallbacks(runnableMobile);
handler.postDelayed(runnableMobile,CommonUtils.EDITBOX_DELAY);
@Override
});
ed_id.addTextChangedListener(new TextWatcher() {
@Override
@Override
if(CommonUtils.isValid(ed_id)){
til_id.setError(null);
handler.removeCallbacks(runnableAccountId);
handler.postDelayed(runnableAccountId,CommonUtils.EDITBOX_DELAY);
}
}
@Override
});
CommonUtils.initTextChangeEvent(ed_name,til_name);
// CommonUtils.initTextChangeEvent(ed_countrycode,til_countrycode);
CommonUtils.initTextChangeEvent(ed_password,til_password);
LogUtils.printException(e);
@Override
public void run() {
try{
String strMobile=ed_mobile.getText().toString().trim();
if(CommonUtils.isValidMobile(strMobile)){
checkMobileNumberExist();
}else{
til_mobile.setError(getResources().getString(R.string.valid_mobile));
LogUtils.printException(e);
};
@Override
try{
String strId=ed_id.getText().toString().trim();
if(strId.length()==10){
checkAccountIdExist();
}else{
til_id.setError(getResources().getString(R.string.id_validation_field));
LogUtils.printException(e);
};
try {
isMobileNumberAvailable=0;
Query query=myRef.orderByChild("mobile").equalTo(strMobile);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
// CommonUtils.hideProgress();
if (dataSnapshot.exists()) {
UserData bd = issue.getValue(UserData.class);
if(bd!=null){
if(bd.getMobile()!=null&&bd.getMobile().equals(strMobile)){
isMobileNumberAvailable=1;
til_mobile.setError(getResources().getString(R.string.mobile_alread
y_exist));
}else{
}else{
}else{
}
@Override
});
} catch (Exception e) {
LogUtils.printException(e);
try {
isAccountAvailable=0;
Query query=myRef.orderByChild("account").equalTo(strAccountId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
// CommonUtils.hideProgress();
if (dataSnapshot.exists()) {
UserData bd = issue.getValue(UserData.class);
if(bd!=null){
if(bd.getAccount()!=null&&bd.getAccount().equals(strAccountId)){
isAccountAvailable=1;
til_id.setError(getResources().getString(R.string.alreadyExist));
}else{
}else{
}
}else{
@Override
});
} catch (Exception e) {
LogUtils.printException(e);
@Override
case android.R.id.home:
goBack();
return true;
return super.onOptionsItemSelected(item);
/**
*/
try{
finish();
LogUtils.printException(e);
@Override
try{
if (keyCode == KeyEvent.KEYCODE_BACK) {
goBack();
return true;
LogUtils.printException(e);
@Override
super.onPause();
@Override
super.onResume();
/**
private void registerRequest(final String strId, String strName, final String strMobile,
String strPwd){
try {
String id=myRef.push().getKey();
if(createdTime==0){
createdTime=modifiedTime;
String strFCMToken=prefs.getString(PreferenceUtils.FCM_TOKEN,null);
UserData bd=new
UserData(id,strId,strName,strMobile,strPwd,strFCMToken,createdTime,modifiedTime);
CommonUtils.showProgress(context);
myRef.child(id).setValue(bd).addOnSuccessListener(new
OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
CommonUtils.hideProgress();
CommonUtils.showSuccessToast(getResources().getString(R.string.saveSuccess
),context);
goBack();
}).addOnFailureListener(new OnFailureListener() {
@Override
CommonUtils.hideProgress();
});