From d0f8888dedf69e49621a33e7c0c578b77a0f6cf8 Mon Sep 17 00:00:00 2001 From: Wouter Born Date: Wed, 3 Jun 2026 15:23:03 +0200 Subject: [PATCH 1/3] Document OpenRemote extensions repository Adds a concise root README describing the purpose of the extensions repository, its Gradle monorepo structure, available extensions, build commands, usage from custom projects, and basic development guidelines. --- README.md | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 092fcd8..f144040 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,85 @@ # OpenRemote Extensions -[![CI/CD](https://github.com/openremote/console-android/workflows/CI/CD/badge.svg)](https://github.com/openremote/extensions/actions?query=workflow%3ACI%2FCD+branch%3Amain) +[![CI/CD](https://github.com/openremote/extensions/actions/workflows/ci_cd.yml/badge.svg?branch=main&event=push)](https://github.com/openremote/extensions/actions/workflows/ci_cd.yml?query=event%3Apush+branch%3Amain) [![Open Source? Yes!](https://badgen.net/badge/Open%20Source%20%3F/Yes%21/blue?icon=github)](https://github.com/Naereen/badges/) + +This repository contains official OpenRemote extensions. + +Extensions provide optional, domain-specific functionality for the OpenRemote platform, such as protocol agents, asset model definitions, setup tasks, container services, rules, and UI-related resources. +They are kept separate from the OpenRemote Core repository so functionality can be developed, tested, and packaged in a modular way. + +## Repository structure + +This is a Gradle monorepo. +Each extension lives in its own subproject directory, for example: + +```text +extensions/ +├── ems/ +├── entsoe/ +├── build.gradle +└── settings.gradle +``` + +Subprojects are included automatically when they contain a `build.gradle` file. + +## Available extensions + +| Extension | Description | +| --------- | ----------------------------------------------------------------------------------------- | +| `ems` | A new extension-based implementation of the Energy Management System with GOPACS support. | +| `entsoe` | Agent for retrieving ENTSO-E energy price data and storing it as predicted datapoints. | + +## Building + +From the repository root: + +```bash +./gradlew build +``` + +To build a single extension: + +```bash +./gradlew :entsoe:build +``` + +Replace `entsoe` with the name of the extension subproject you want to build. + +## Versioning and publishing + +The repository uses Gradle-based release/version management. +Extension artifacts are published under the `io.openremote.extension` group. + +Official extensions are intended to be built and released in sync with compatible OpenRemote platform versions. + +## Using extensions + +Currently, extensions are used by adding them as dependencies to a custom project. + +For example, the ENTSO-E extension can be added to the [dependencies block](https://github.com/openremote/custom-project/blob/d48cd93a21873e62df7fe5f79dce0624f3cfc972/manager/build.gradle#L3-L8) of the manager project in your custom project: + +```groovy +dependencies { + api "io.openremote.extension:openremote-entsoe-extension:0.5.1" +} +``` + +After the custom project is rebuilt and the OpenRemote Manager is restarted, the extension is available as part of that deployment. + +## Developing an extension + +When adding or updating an extension: + +* Keep extension code in its own Gradle subproject. +* Use the package namespace `org.openremote.extension.`. +* Register extension components using the appropriate OpenRemote SPI files under `META-INF/services`. +* Keep extension-specific resources under an extension-specific resource path. +* Add tests for extension behaviour, preferably following the existing OpenRemote testing conventions. + +Typical extension integration points include: + +* `AssetModelProvider` +* `ContainerService` +* `SetupTasks` +* `ExtensionMetadata` From 43ac8f77f18ca9ba6eef7673ddf8d642bc0286c3 Mon Sep 17 00:00:00 2001 From: Wouter Born Date: Wed, 3 Jun 2026 15:31:56 +0200 Subject: [PATCH 2/3] Apply suggestions from code review Co-authored-by: Wouter Born --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f144040..4d26e8d 100644 --- a/README.md +++ b/README.md @@ -82,4 +82,3 @@ Typical extension integration points include: * `AssetModelProvider` * `ContainerService` * `SetupTasks` -* `ExtensionMetadata` From b23ee47af85360ac29dd1f75c15b61b24a1fc51c Mon Sep 17 00:00:00 2001 From: Wouter Born Date: Wed, 3 Jun 2026 16:04:08 +0200 Subject: [PATCH 3/3] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d26e8d..d4a498c 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ extensions/ └── settings.gradle ``` -Subprojects are included automatically when they contain a `build.gradle` file. +Subprojects are included automatically when they contain a `build.gradle` file, unless the directory contains a `.buildignore` file. ## Available extensions