In todays world, with tedious manual tasks getting automated, several parts of india still find people physically going from house to house noting down electricity meter readings to generate bills. The main disadvantage of this task is that, it may lead to human errors and inaccurate readings or bill generations. In some cases, people even have to travel to remote locations for this purpose.
Our application aims to solve this problem by automating the bill generation process by fetching the meter readings from each customers associated meter, generating a monthly bill and sending it out to each and every customer, which they can access through a web portal. The main advantage of this application is that the bills generated are accurate, reliable and error-free. The customer can they pay the bill via their preferred method of payment.
The application also contains a feature where the customer can raise a complaint with the system administrator. The user can track the status of his complaint. On resolving the issue, the system administrator marks the status as completed.
The primary motivation for this application stemmed from an interest in trying to create a secure communication channel for IOT devices to communicate on.
- Operating System
- Ubuntu 16.04 +
- Windows
- Database
- PostgreSQL
- Redis
- Browser
- Chrome
- Firefox
- Opera
- Safari
sudo apt-get install libpq-dev
virtualenv -p python3.6 venv (If venv not present)
sudo pip3 install -r requirments.txt
sudo pip3 install -r dev_requirments.txt
pip install gunicorn
. venv/bin/activate
gunicorn --bind 0.0.0.0:5000 app:app
- export FLASK_APP=app.py
- export FLASK_DEBUG=1
- export PYTHONDONTWRITEBYTECODE=1
- Authorization
- Authentication
- Integrity
- Confidentiality
- Elliptic Curve Integrated Encryption Scheme (ECDH + AES (ECIES)
- Elliptic Curve Diffie-Hellman (ECDH)
- AES-256 with CBC-Mode
- Elliptic Curve Digital Signature Algorithm (ECDSA)
- Curve Used - Secp256k1
- SHA-256
The Project comprises of two main endpoints.
- User
- Admin
- Registration :
- User Details Verification :
- Lease out Properties :
- Billing :
- Setting Cost Per Unit for Billing(Admin) :
- Support Query :
The user and admin can sign up with the system by providing basic details of himself and has to verify his email address as well as mobile number through an OTP.
The admin on receiving the details of the user verirfies it, and can even reject the user’s request. On being verified, the user is administered an IOT Device which gets activated and starts recording the electricity units.
The user has provisions to lease out his property (either commercial or residential) to tenants and add the tenants name as well to the property details. The user can delist the tenants name from the property details as and when required. The tenant too, has provisions to leave the property and delist himself.
To generate the monthly bill, the admin on the main server side sends a bill generation request to an IOT Server. The IOT Server then forwards the request to every IOT Device under in an asynchronous manner. The IOT devices send the current units to the IOT Server, which then forwards it back to the main server where the bill is generated.
The system has the feature of setting the cost per unit and taxes or miscellaneous costs for commercial and residential usage respectively.
In case of any queries/complaints the user can raise the complaint with the admin and the system generates a ticket. The admin on receiving the complaint/query works towards resolving it.
- Login using email i.e. password-less login.
- Multi Factor Authentication
- SMS OTP
- Email Verification
- Secure storage of passwords and sensitive user information
- Password Format :- pbkdf2:sha256:50000$salt$hash
- SHA256 - HAshing Algorithm
- Number of Iterations : 50000
- Salt Length : 16
- Customised bill generation
- Tracking payment status and generation of defaulters
- Support query
- Secure transmission of data between devices and server by encryption and authenticating the data
- Prevention of malicious data entering system using [Cerberus](https://docs.python-cerberus.org/en/stable/)
- Sanitisation of data through forms
- Use of flask-limiter for preventing DoS [Flask-Limiter](https://flask-limiter.readthedocs.io/en/stable/)
- Backend Technologies
- Python Flask
- Python Libraries
- Cerberus
- Celery
- ecdsa
- Pycryptodome
- Flask-Limiter
- Werkzeug.security
- Base64
- Hashlib
- bcrypt
- requests
- flask-Sqlalchemy
- flask-login
- flask-mail
- secrets
- datetime
- json
- Frontend Technologies
- HTML
- CSS
- Bootstrap 4
- Jinja2
- Databases
- PostgreSQL
- Redis
Assign Server and Device to User
Assign Cost per Unit for Commercial as well as Residential Property