Skip to content

🔥Kotlin Multiplatform Desktop/Android/iOS Energy Tracker app

License

Notifications You must be signed in to change notification settings

ryanw-mobile/OctoMeter

Repository files navigation

Project Kunigami /
OctoMeter: Empowering Smart Electricity Usage
Pull request GitHub Repo stars Gradle Build Codacy Coverage Badge Codacy Grade Badge

Production-grade Kotlin Multiplatform App targeting Desktop, Android, iOS


cover image


Made in the UK, For the UK.

Complementary article: Releasing my First True Kotlin Multiplatform App

cover image

It works for me

This is a dashboard-type app that runs on desktop (desktop-first), Android, and iOS. It implements an adaptive layout that works on mobile, tablet, and dynamic desktop window sizes. The app honours light and dark modes on all available platforms.

The main purposes of this app are:

  • Compile smart meter electricity usage; estimate and project electricity usage and cost.
  • Track the Agile Octopus tariff unit rates for the coming 24 hours, with countdown and automatic refresh.
  • Browse available Octopus Energy tariffs.

This is a fully functional app that I developed for myself. I use it every day to monitor energy consumption and save money. For this reason, the app was intentionally built to reach production-level quality as much as possible.

  • While it should technically work for some other Octopus Energy customers, I do not have enough sample data to cover all use cases.
  • 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.

cover image


If you like this app, consider giving me a star, following me on Medium, or on LinkedIn.



Switch to Octopus!

  • Learn more about the Agile Octopus smart tariff, or other available Octopus tariffs shown in this App.
  • Switch to Octopus Energy using this link, both of us will get £50 (or £100 for business).



Running the app

I use Android Studio Koala to build the Android and Deskop apps. Xcode 15.4 for iOS.

Tip

Octopus Energy/Kraken don't prefer UI-sharing. While this app is primarily designed for desktop use, it leverages CMP to provide mobile versions as well. This decision does not reflect my personal preferences; it simply reflects the budgetary constraints that prevent me from developing in SwiftUI for this project.

All downloadables are provided under the Release Section.

  • MacOS Desktop App: We provide a DMG installer.
  • Windows Desktop App: We provide both EXE and MSI installers.
  • Android: We provide signed APK and App Bundle.
  • iOS: Join as a tester at Test Flight.
  • To build and run the Desktop app yourself, execute ./gradlew run

Testflight QR Code




To-do lists

Planned enhancements are logged as issues.

Note

I am currently seeking my next Senior Android Developer role and maintaining this project at my own expense with a limited budget. Octopus Energy and Kraken HR have my CV on file. If I end up working with them, I plan to enhance this project to address a wider range of customer use cases. Otherwise, it will transition to maintenance mode once I am no longer an Octopus Energy customer.

RestAPI and GraphQL

Octopus Energy and Kraken prefer GraphQL over REST API. Accordingly, the second phase of this project has migrated several REST APIs to GraphQL. Unfortunately, not every REST API currently has an equivalent GraphQL counterpart; therefore, this app has a mixed use of both for demonstration purposes

Features Implementation
Account and meters 🕸️ GraphQL
Products Search (by postcode) 🕸️ GraphQL
Tariff details 🕸️ GraphQL
Half-hourly tariff rates 😴 RestAPI (Needs access to tariffs not subscribed)
Consumptions 😴 RestAPI (Needs server to honour query end date)

Version 1.4.0 is the last version it contains pure Ktor-RestAPI.



Data Security and Privacy

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.



Some technical details

  • /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.

Dependencies

Plugins



Licenses

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.

Icon licenses

Every tiny piece matters. This App contains the icons contributed by:

MIT License:

Apache 2.0 License:

CC BY 4.0 License:

ISC License: