Complementary article: Releasing my First True Kotlin Multiplatform App
This app is designed for Octopus Energy customers in the UK who have a smart meter installed. If you don’t have a smart meter, you can still try out the app. It runs in demo mode by default, showing fake user data when authentication is required.
This is a fully functional app that I developed for myself, and I use it every day to monitor energy consumption and save money. While it should technically work for other Octopus Energy customers, I can’t guarantee it will handle all scenarios such as different tariffs or multiple meter installations. These may produce data that the app cannot process.
This is a dashboard-type app that runs on desktop (desktop-first), Android, and iOS. It supports an adaptive layout that works on mobile, tablet, and dynamic desktop window sizes. The app honours light and dark modes on all supported platforms.
The main purposes of this app are:
For non-Octopus Energy customers, or non-UK residents, the demo mode will display random meter readings and default tariff rates to illustrate the app’s functionality.
The current release meets my daily needs. However, this project will continue to be maintained and improved as a way for me to gain real-world hands-on Kotlin Multiplatform development experience. For this reason, the app was intentionally built to reach production-level quality as much as possible.
If you like this app, consider giving me a star, following me on Medium, or connecting with me on LinkedIn.
I am also looking for my next Senior Android Dev role, too.
I use Android Studio Koala to build the Android and Deskop apps. Xcode 15.4 for iOS.
All downloadables are provided under the Release Section.
./gradlew run
Planned enhancements are logged as issues.
I have limited development budget. There are known issues which are not likely to be address for the time being due to shortage of funding.
[!IMPORTANT]
Regarding fixed charges, tariff rates, and cost estimation shown on the app: This app has no access to your payment details, so by default it applies the direct debit tariff to estimate usage costs. The daily half-hourly cost should closely match the actual bill. For longer intervals, the app may not produce the exact billable amount. Please refer to your actual bills in that case.
/composeApp
is for Kotlin code shared across the Compose Multiplatform application.
It contains several subfolders:
commonMain
is for code that’s common for all targets.androidMain
is the traditional Android project root.desktopMain
is for the desktop (JVM) app.iosMain
is for the Kotlin code to be exposed to the iOS app./iosApp
contains the iOS application. Open OctoMeter.xcworkspace
to build the App.
First thing first: This app can run under the demo mode without requiring any credentials.
To pull real smart meter data from your Octopus Energy account, you need to generate an API key for your account at https://octopus.energy/dashboard/new/accounts/personal-details/api-access. This app never asks for your Octopus customer account password, and you can always generate a new API key to invalidate the old keys.
This app stores your API key, account number, MPAN and meter serial number
using EncryptedSharedPreferences
on Android, or the Keychain on iOS. On desktop, these credentials
are currently unencrypted, but expected to do so when the library we use supports it.
This project is licensed under the Mozilla Public License Version 2.0 (MPL-2.0) with a non-commercial clause. See the LICENSE file for details.
Every tiny piece matters. This App contains the icons contributed by:
MIT License:
Apache 2.0 License:
CC BY 4.0 License:
ISC License: