diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
new file mode 100644
index 0000000..abc9f64
--- /dev/null
+++ b/.github/workflows/codeql-analysis.yml
@@ -0,0 +1,92 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL Advanced"
+
+on:
+ push:
+ branches: [ "master", "develop" ]
+ pull_request:
+ branches: [ "master", "develop" ]
+ schedule:
+ - cron: '26 10 * * 5'
+
+jobs:
+ analyze:
+ name: Analyze (${{ matrix.language }})
+ # Runner size impacts CodeQL analysis time. To learn more, please see:
+ # - https://gh.io/recommended-hardware-resources-for-running-codeql
+ # - https://gh.io/supported-runners-and-hardware-resources
+ # - https://gh.io/using-larger-runners (GitHub.com only)
+ # Consider using larger runners or machines with greater resources for possible analysis time improvements.
+ runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
+ permissions:
+ # required for all workflows
+ security-events: write
+
+ # required to fetch internal or private CodeQL packs
+ packages: read
+
+ # only required for workflows in private repositories
+ actions: read
+ contents: read
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - language: java-kotlin
+ build-mode: none # This mode only analyzes Java. Set this to 'autobuild' or 'manual' to analyze Kotlin too.
+ # CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
+ # Use `c-cpp` to analyze code written in C, C++ or both
+ # Use 'java-kotlin' to analyze code written in Java, Kotlin or both
+ # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
+ # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
+ # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
+ # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
+ # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v3
+ with:
+ languages: ${{ matrix.language }}
+ build-mode: ${{ matrix.build-mode }}
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
+
+ # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+ # queries: security-extended,security-and-quality
+
+ # If the analyze step fails for one of the languages you are analyzing with
+ # "We were unable to automatically build your code", modify the matrix above
+ # to set the build mode to "manual" for that language. Then modify this step
+ # to build your code.
+ # ℹ️ Command-line programs to run using the OS shell.
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+ - if: matrix.build-mode == 'manual'
+ shell: bash
+ run: |
+ echo 'If you are using a "manual" build mode for one or more of the' \
+ 'languages you are analyzing, replace this with the commands to build' \
+ 'your code, for example:'
+ echo ' make bootstrap'
+ echo ' make release'
+ exit 1
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v3
+ with:
+ category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/maven-publish.yml b/.github/workflows/maven-publish.yml
index 7ef3771..a6243bc 100644
--- a/.github/workflows/maven-publish.yml
+++ b/.github/workflows/maven-publish.yml
@@ -15,12 +15,15 @@ jobs:
build:
runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
steps:
- uses: actions/checkout@v2
- name: Use Cache for Maven packages
- uses: actions/cache@v2
+ uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
@@ -33,9 +36,11 @@ jobs:
GPG_FILE: ${{secrets.GPG_FILE}}
- name: Set up Java for Apache Maven Central
- uses: actions/setup-java@v1
+ uses: actions/setup-java@v4
with:
java-version: 11
+ distribution: temurin
+ cache: maven
server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml
server-username: OSSRH_USERNAME # env variable for username in deploy
server-password: OSSRH_PASSWORD # env variable for token in deploy
@@ -53,10 +58,12 @@ jobs:
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
- name: Set up Java for publishing to GitHub Packages
- uses: actions/setup-java@v1
+ uses: actions/setup-java@v4
with:
java-version: 11
-
+ distribution: temurin
+ cache: maven
+
- name: Publish to GitHub Packages
# -DaltDeploymentRepository=github::default::https://maven.pkg.github.com/csowada/ebus
run: mvn deploy --batch-mode --update-snapshots -P !sign,!build-extras,!deploy-ossrh,deploy-github -Dmaven.test.skip=true
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index e295577..9d040cb 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -5,60 +5,51 @@ name: Java CI with Maven
on:
push:
- branches: [ master, develop ]
+ branches: [master, develop]
pull_request:
types: [opened, synchronize, reopened]
jobs:
-
build:
-
runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
steps:
- - uses: actions/checkout@v2
- with:
- fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
-
- - name: Cache Maven packages
- uses: actions/cache@v2
- with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
-
- - name: Cache SonarCloud packages
- uses: actions/cache@v2
- with:
- path: ~/.sonar/cache
- key: ${{ runner.os }}-sonar
- restore-keys: ${{ runner.os }}-sonar
-
- - name: Set up Java
- uses: actions/setup-java@v1
- with:
- java-version: 11
- server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml
- server-username: OSSRH_USERNAME # env variable for username in deploy
- server-password: OSSRH_PASSWORD # env variable for token in deploy
-
- - name: Build and analyze
- run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
- SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
- BUILD_NUMBER: ${{ github.run_id }}-${{ github.run_number }}
-
- - name: Upload Maven build artifact
- uses: actions/upload-artifact@v2
- with:
- name: artifact
- path: target/*.jar
-
- # Upload if develop branch
- - name: Upload snapshot to OSSRH if development release
- if: ${{ github.ref == 'refs/heads/develop' && github.event_name == 'push' }}
- run: mvn deploy --batch-mode --update-snapshots -P !sign,!build-extras,deploy-ossrh -Dmaven.test.skip=true -DskipChecks -DskipTest
- env:
- OSSRH_USERNAME: ${{ secrets.OSSRH_JIRA_USERNAME }}
- OSSRH_PASSWORD: ${{ secrets.OSSRH_JIRA_PASSWORD }}
\ No newline at end of file
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
+
+ - name: Cache Maven packages
+ uses: actions/cache@v4
+ with:
+ path: ~/.m2
+ key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
+
+ - name: Set up Java
+ uses: actions/setup-java@v4
+ with:
+ java-version: 11
+ distribution: temurin
+ cache: maven
+ server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml
+ server-username: OSSRH_USERNAME # env variable for username in deploy
+ server-password: OSSRH_PASSWORD # env variable for token in deploy
+
+ - name: Build with Maven
+ run: mvn -B package --file pom.xml
+
+ - name: Upload Maven build artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: artifact
+ path: target/*.jar
+
+ # Upload if develop branch
+ - name: Upload snapshot to OSSRH if development release
+ if: ${{ github.ref == 'refs/heads/develop' && github.event_name == 'push' }}
+ run: mvn deploy --batch-mode --update-snapshots -P !sign,!build-extras,deploy-ossrh -Dmaven.test.skip=true -DskipChecks -DskipTest
+ env:
+ OSSRH_USERNAME: ${{ secrets.OSSRH_JIRA_USERNAME }}
+ OSSRH_PASSWORD: ${{ secrets.OSSRH_JIRA_PASSWORD }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 774753d..8e0dfe2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file.
## Unreleased
+## [1.1.9] - 2025-01-31
+### Changed
+- Update dependecies, license headers and pipelines
+- Fix Wolf CWL 300/400 issue for setter `fan_stepX`
+- Add Cooling State to `controller.d_values_rc2`
+- Update to ebus core lib v1.1.13
+
## [1.1.8] - 2023-03-25
### Changed
- Enhance Wolf CWL 300/400
diff --git a/pom.xml b/pom.xml
index 1e31c2d..919b742 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
eBUS library configuration
de.cs-dev.ebus
ebus-configuration
- 1.1.8
+ 1.1.9
https://github.com/csowada/ebus-configuration
bundle
@@ -17,13 +17,13 @@
1.8
1.8
8
- 2023
+ 2025
${project.version}
csowada_ebus-configuration
csowada
https://sonarcloud.io
- 1.1.10
+ 1.1.13
@@ -245,7 +245,7 @@
org.sonatype.plugins
nexus-staging-maven-plugin
- 1.6.8
+ 1.6.14
true
ossrh
@@ -308,14 +308,14 @@
com.google.code.gson
gson
- 2.8.9
+ 2.10.1
test
org.apache.commons
commons-lang3
- 3.12.0
+ 3.14.0
test
@@ -336,14 +336,14 @@
ch.qos.logback
logback-classic
- 1.2.10
+ 1.5.16
test
org.slf4j
slf4j-api
- 1.7.32
+ 2.0.16
provided
diff --git a/src/main/java/de/csdev/ebus/configuration/EBusConfigurationReaderExt.java b/src/main/java/de/csdev/ebus/configuration/EBusConfigurationReaderExt.java
index 217d220..1e0331c 100644
--- a/src/main/java/de/csdev/ebus/configuration/EBusConfigurationReaderExt.java
+++ b/src/main/java/de/csdev/ebus/configuration/EBusConfigurationReaderExt.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/main/java/de/csdev/ebus/configuration/EBusConfigurationVersion.java b/src/main/java/de/csdev/ebus/configuration/EBusConfigurationVersion.java
index cf9ffa7..cec19b9 100644
--- a/src/main/java/de/csdev/ebus/configuration/EBusConfigurationVersion.java
+++ b/src/main/java/de/csdev/ebus/configuration/EBusConfigurationVersion.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/main/resources/commands/common-configuration.json b/src/main/resources/commands/common-configuration.json
index a2d5170..1d9e6ae 100644
--- a/src/main/resources/commands/common-configuration.json
+++ b/src/main/resources/commands/common-configuration.json
@@ -189,7 +189,13 @@
{"name": "performance_forced", "type": "data1b", "label": "Forced performance"},
{"name": "states", "type": "byte", "children": [
{"name": "state_dhw", "type": "bit", "label": "State DHW active"},
- {"name": "state_hc", "type": "bit", "label": "State heating circuit active"}
+ {"name": "state_hc", "type": "bit", "label": "State heating circuit active"},
+ {"name": "_state_unknown_0x04", "type": "bit", "label": "unknown 0x04"},
+ {"name": "_state_unknown_0x08", "type": "bit", "label": "unknown 0x08"},
+ {"name": "_state_unknown_0x10", "type": "bit", "label": "unknown 0x10"},
+ {"name": "state_cooling", "type": "bit", "label": "State cooling active"},
+ {"name": "_state_unknown_0x40", "type": "bit", "label": "unknown 0x40"},
+ {"name": "_state_unknown_0x80", "type": "bit", "label": "unknown 0x80"}
]},
{"name": "temp_d_dhw", "type": "data2b", "label": "DHW desire temperature", "min":0, "max":100, "format":"%.1f°C"}
],
diff --git a/src/main/resources/commands/wolf-cwl-configuration.json b/src/main/resources/commands/wolf-cwl-configuration.json
index 6eaf240..e8bbfd2 100644
--- a/src/main/resources/commands/wolf-cwl-configuration.json
+++ b/src/main/resources/commands/wolf-cwl-configuration.json
@@ -456,7 +456,7 @@
"command": "40 80",
"master": [
{"type": "static", "default": "21"},
- {"name": "cur", "type": "uint", "label":"Current Value", "reverseByteOrder": true, "min": 0, "max": 50, "step": 50, "format":"%4dm³/h"}
+ {"name": "fan_step0", "type": "uint", "label":"Current Value", "reverseByteOrder": true, "min": 0, "max": 50, "step": 50, "format":"%4dm³/h"}
]
}
},
@@ -483,7 +483,7 @@
"command": "40 80",
"master": [
{"type": "static", "default": "01"},
- {"name": "cur", "type": "uint", "label":"Current Value", "reverseByteOrder": true, "min": 50, "max": 400, "step": 5, "format":"%4dm³/h"}
+ {"name": "fan_step1", "type": "uint", "label":"Current Value", "reverseByteOrder": true, "min": 50, "max": 400, "step": 5, "format":"%4dm³/h"}
]
}
@@ -511,7 +511,7 @@
"command": "40 80",
"master": [
{"type": "static", "default": "02"},
- {"name": "cur", "type": "uint", "label":"Current Value", "reverseByteOrder": true, "min": 50, "max": 400, "step": 5, "format":"%4dm³/h"}
+ {"name": "fan_step2", "type": "uint", "label":"Current Value", "reverseByteOrder": true, "min": 50, "max": 400, "step": 5, "format":"%4dm³/h"}
]
}
},
@@ -538,7 +538,7 @@
"command": "40 80",
"master": [
{"type": "static", "default": "03"},
- {"name": "cur", "type": "uint", "label":"Current Value", "reverseByteOrder": true, "min": 50, "max": 400, "step": 5, "format":"%4dm³/h"}
+ {"name": "fan_step3", "type": "uint", "label":"Current Value", "reverseByteOrder": true, "min": 50, "max": 400, "step": 5, "format":"%4dm³/h"}
]
}
},
diff --git a/src/test/java/de/csdev/ebus/StaticTestTelegrams.java b/src/test/java/de/csdev/ebus/StaticTestTelegrams.java
index c98116f..9836f3a 100644
--- a/src/test/java/de/csdev/ebus/StaticTestTelegrams.java
+++ b/src/test/java/de/csdev/ebus/StaticTestTelegrams.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/TestUtils.java b/src/test/java/de/csdev/ebus/TestUtils.java
index f9e7873..6469b5a 100644
--- a/src/test/java/de/csdev/ebus/TestUtils.java
+++ b/src/test/java/de/csdev/ebus/TestUtils.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/cfg/EBusCommonTelegramTest.java b/src/test/java/de/csdev/ebus/cfg/EBusCommonTelegramTest.java
index b2f322a..f286ad8 100644
--- a/src/test/java/de/csdev/ebus/cfg/EBusCommonTelegramTest.java
+++ b/src/test/java/de/csdev/ebus/cfg/EBusCommonTelegramTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,12 +8,18 @@
*/
package de.csdev.ebus.cfg;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.io.IOException;
+import java.math.BigDecimal;
import java.nio.ByteBuffer;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.jdt.annotation.NonNull;
import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
@@ -110,7 +116,8 @@ public void testTelegram1() {
@Test
public void testTelegram2() {
/*
- * 2014-10-23 16:10:30 - >>> Betriebsdaten des Feuerungsautomaten an den Regler - Block 1
+ * 2014-10-23 16:10:30 - >>> Betriebsdaten des Feuerungsautomaten an den Regler
+ * - Block 1
* 2014-10-23 16:10:30 - >>> auto_stroker.state_valve2 false Valve2
* 2014-10-23 16:10:30 - >>> auto_stroker.state_ldw false LDW
* 2014-10-23 16:10:30 - >>> auto_stroker.status_auto_stroker 0 Statusanzeige
@@ -124,7 +131,8 @@ public void testTelegram2() {
* 2014-10-23 16:10:30 - >>> auto_stroker.state_gdw false GDW
* 2014-10-23 16:10:30 - >>> auto_stroker.state_flame false Flame
* 2014-10-23 16:10:30 - >>> auto_stroker.state_valve1 false Valve1
- * 2014-10-23 16:10:30 - >>> auto_stroker.performance_burner null Stellgrad MIN-MAX Kesselleistung in %
+ * 2014-10-23 16:10:30 - >>> auto_stroker.performance_burner null Stellgrad
+ * MIN-MAX Kesselleistung in %
*/
byte[] bs = EBusUtils.toByteArray("03 FE 05 03 08 01 00 40 FF 2D 17 30 0E C8 AA");
@@ -138,8 +146,10 @@ public void testTelegram3() {
* 2014-10-23 16:10:33 - >>> controller2.temp_t_vessel null Kesselsollwert
* 2014-10-23 16:10:33 - >>> controller2.temp_outdoor 14.597656 Außentemperatur
* 2014-10-23 16:10:33 - >>> controller2.power_enforcement null Leistungszwang
- * 2014-10-23 16:10:33 - >>> controller2.status_bwr false BWR aktiv (Wärmepumpen?)
- * 2014-10-23 16:10:33 - >>> controller2.status_heat_circuit true Heizkreis aktiv
+ * 2014-10-23 16:10:33 - >>> controller2.status_bwr false BWR aktiv
+ * (Wärmepumpen?)
+ * 2014-10-23 16:10:33 - >>> controller2.status_heat_circuit true Heizkreis
+ * aktiv
* 2014-10-23 16:10:33 - >>> controller2.temp_t_boiler 5.0 Brauchwassersoll
*/
byte[] bs = EBusUtils.toByteArray("03 F1 08 00 08 00 80 99 0E 80 02 00 05 94 AA");
@@ -150,11 +160,15 @@ public void testTelegram3() {
public void testTelegram4() {
/*
* 2014-10-23 16:10:39 - >>> Betriebsdaten des Reglers an den Feuerungsautomaten
- * 2014-10-23 16:10:39 - >>> controller.status_warm_req2 3 Statuswärmeanforderung2
+ * 2014-10-23 16:10:39 - >>> controller.status_warm_req2 3
+ * Statuswärmeanforderung2
* 2014-10-23 16:10:39 - >>> controller.value_fuel null Brennstoffwert
- * 2014-10-23 16:10:39 - >>> controller.status_warm_req1 187 Statuswärmeanforderung
- * 2014-10-23 16:10:39 - >>> controller.temp_t_vessel 22.0625 Kesselsollwert-Temperatur
- * 2014-10-23 16:10:39 - >>> controller.pressure_t_vessel null Kesselsollwert-Druck
+ * 2014-10-23 16:10:39 - >>> controller.status_warm_req1 187
+ * Statuswärmeanforderung
+ * 2014-10-23 16:10:39 - >>> controller.temp_t_vessel 22.0625
+ * Kesselsollwert-Temperatur
+ * 2014-10-23 16:10:39 - >>> controller.pressure_t_vessel null
+ * Kesselsollwert-Druck
* 2014-10-23 16:10:39 - >>> controller.performance_burner 0.0 Stellgrad
* 2014-10-23 16:10:39 - >>> controller.temp_t_boiler 50.0 Brauchwassersollwert
*/
@@ -191,4 +205,34 @@ public void testDecodeBroadcast() {
}
+ @Test
+ public void testDecodeControllerDValuesRc2() {
+ /**
+ * Test
+ *
+ * @see https://github.com/csowada/ebus-configuration/issues/20
+ */
+ try {
+ byte[] bs = EBusUtils.toByteArray("10 03 08 00 08 00 05 00 1C 80 E0 00 0A 11 00 AA");
+ assertTrue(TestUtils.canResolve(commandRegistry, bs));
+
+ @NonNull
+ List list = commandRegistry.find(bs);
+
+ @NonNull
+ Map decodeTelegram = EBusCommandUtils.decodeTelegram(list.get(0), bs);
+
+ assertEquals("Temperature Outside", BigDecimal.valueOf(28), decodeTelegram.get("temp_outside"));
+ assertEquals("Temperature D DHW", BigDecimal.valueOf(10), decodeTelegram.get("temp_d_dhw"));
+ assertEquals("Temperature", BigDecimal.valueOf(5), decodeTelegram.get("temp_d_boiler"));
+ assertEquals("State Cooling", true, decodeTelegram.get("state_cooling"));
+ assertEquals("State DHW", false, decodeTelegram.get("state_dhw"));
+ assertEquals("State HC", false, decodeTelegram.get("state_hc"));
+ assertEquals("Performance Forced", null, decodeTelegram.get("performance_forced"));
+
+ } catch (EBusTypeException e) {
+ fail(e.getMessage());
+ }
+ }
+
}
diff --git a/src/test/java/de/csdev/ebus/cfg/EBusCommonVaillantDateTimeTest.java b/src/test/java/de/csdev/ebus/cfg/EBusCommonVaillantDateTimeTest.java
index 3fa4314..14670b2 100644
--- a/src/test/java/de/csdev/ebus/cfg/EBusCommonVaillantDateTimeTest.java
+++ b/src/test/java/de/csdev/ebus/cfg/EBusCommonVaillantDateTimeTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/cfg/EBusVaillantTelegramTest.java b/src/test/java/de/csdev/ebus/cfg/EBusVaillantTelegramTest.java
index 39ad61e..e27f9f2 100644
--- a/src/test/java/de/csdev/ebus/cfg/EBusVaillantTelegramTest.java
+++ b/src/test/java/de/csdev/ebus/cfg/EBusVaillantTelegramTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/cfg/EBusVaillantVRC430TelegramTest.java b/src/test/java/de/csdev/ebus/cfg/EBusVaillantVRC430TelegramTest.java
index 2353ca5..3f8fc38 100644
--- a/src/test/java/de/csdev/ebus/cfg/EBusVaillantVRC430TelegramTest.java
+++ b/src/test/java/de/csdev/ebus/cfg/EBusVaillantVRC430TelegramTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/cfg/EBusWolfBM2Test.java b/src/test/java/de/csdev/ebus/cfg/EBusWolfBM2Test.java
index 7e25260..2cbe40d 100644
--- a/src/test/java/de/csdev/ebus/cfg/EBusWolfBM2Test.java
+++ b/src/test/java/de/csdev/ebus/cfg/EBusWolfBM2Test.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/cfg/EBusWolfCWLTest.java b/src/test/java/de/csdev/ebus/cfg/EBusWolfCWLTest.java
index 35e649b..941548e 100644
--- a/src/test/java/de/csdev/ebus/cfg/EBusWolfCWLTest.java
+++ b/src/test/java/de/csdev/ebus/cfg/EBusWolfCWLTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/cfg/EBusWolfMMTelegramTest.java b/src/test/java/de/csdev/ebus/cfg/EBusWolfMMTelegramTest.java
index 4bc8afc..1ab8af8 100644
--- a/src/test/java/de/csdev/ebus/cfg/EBusWolfMMTelegramTest.java
+++ b/src/test/java/de/csdev/ebus/cfg/EBusWolfMMTelegramTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/cfg/EBusWolfSM1TelegramTest.java b/src/test/java/de/csdev/ebus/cfg/EBusWolfSM1TelegramTest.java
index caa5d12..becbd48 100644
--- a/src/test/java/de/csdev/ebus/cfg/EBusWolfSM1TelegramTest.java
+++ b/src/test/java/de/csdev/ebus/cfg/EBusWolfSM1TelegramTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/cfg/KW_CRC_Test.java b/src/test/java/de/csdev/ebus/cfg/KW_CRC_Test.java
index 0c61467..9b8b178 100644
--- a/src/test/java/de/csdev/ebus/cfg/KW_CRC_Test.java
+++ b/src/test/java/de/csdev/ebus/cfg/KW_CRC_Test.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/wip/EBusCommonTelegramTest2.java b/src/test/java/de/csdev/ebus/wip/EBusCommonTelegramTest2.java
index 0509a41..59dbabd 100644
--- a/src/test/java/de/csdev/ebus/wip/EBusCommonTelegramTest2.java
+++ b/src/test/java/de/csdev/ebus/wip/EBusCommonTelegramTest2.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
diff --git a/src/test/java/de/csdev/ebus/wip/EBusdControllerTest.java b/src/test/java/de/csdev/ebus/wip/EBusdControllerTest.java
index 5accdd4..065f8dd 100644
--- a/src/test/java/de/csdev/ebus/wip/EBusdControllerTest.java
+++ b/src/test/java/de/csdev/ebus/wip/EBusdControllerTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2016-2023 by the respective copyright holders.
+ * Copyright (c) 2016-2025 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0