From 9d2c67c6993758a4d2b3fdc71a9e158463af29ef Mon Sep 17 00:00:00 2001 From: Philipp Schneider Date: Sun, 28 Jul 2024 20:56:29 +0200 Subject: [PATCH 01/36] Initial implementation of the FENECON Binding - Binding for FENECON via REST-API access implemented - Documentation for FENECON added - The implementation Closes #17173 Signed-off-by: Philipp Schneider --- bundles/org.openhab.binding.fenecon/NOTICE | 13 + bundles/org.openhab.binding.fenecon/README.md | 145 ++++ bundles/org.openhab.binding.fenecon/pom.xml | 26 + .../src/main/feature/feature.xml | 9 + .../internal/FeneconBindingConstants.java | 31 + .../internal/FeneconConfiguration.java | 32 + .../fenecon/internal/FeneconHandler.java | 232 ++++++ .../internal/FeneconHandlerFactory.java | 55 ++ .../src/main/resources/OH-INF/addon/addon.xml | 10 + .../resources/OH-INF/i18n/fenecon.properties | 3 + .../resources/OH-INF/thing/thing-types.xml | 144 ++++ bundles/pom.xml | 706 +++++++++++++++++- 12 files changed, 1393 insertions(+), 13 deletions(-) create mode 100644 bundles/org.openhab.binding.fenecon/NOTICE create mode 100644 bundles/org.openhab.binding.fenecon/README.md create mode 100644 bundles/org.openhab.binding.fenecon/pom.xml create mode 100644 bundles/org.openhab.binding.fenecon/src/main/feature/feature.xml create mode 100644 bundles/org.openhab.binding.fenecon/src/main/java/org/openhab/binding/fenecon/internal/FeneconBindingConstants.java create mode 100644 bundles/org.openhab.binding.fenecon/src/main/java/org/openhab/binding/fenecon/internal/FeneconConfiguration.java create mode 100644 bundles/org.openhab.binding.fenecon/src/main/java/org/openhab/binding/fenecon/internal/FeneconHandler.java create mode 100644 bundles/org.openhab.binding.fenecon/src/main/java/org/openhab/binding/fenecon/internal/FeneconHandlerFactory.java create mode 100644 bundles/org.openhab.binding.fenecon/src/main/resources/OH-INF/addon/addon.xml create mode 100644 bundles/org.openhab.binding.fenecon/src/main/resources/OH-INF/i18n/fenecon.properties create mode 100644 bundles/org.openhab.binding.fenecon/src/main/resources/OH-INF/thing/thing-types.xml diff --git a/bundles/org.openhab.binding.fenecon/NOTICE b/bundles/org.openhab.binding.fenecon/NOTICE new file mode 100644 index 0000000000000..38d625e349232 --- /dev/null +++ b/bundles/org.openhab.binding.fenecon/NOTICE @@ -0,0 +1,13 @@ +This content is produced and maintained by the openHAB project. + +* Project home: https://www.openhab.org + +== Declared Project Licenses + +This program and the accompanying materials are made available under the terms +of the Eclipse Public License 2.0 which is available at +https://www.eclipse.org/legal/epl-2.0/. + +== Source Code + +https://github.com/openhab/openhab-addons diff --git a/bundles/org.openhab.binding.fenecon/README.md b/bundles/org.openhab.binding.fenecon/README.md new file mode 100644 index 0000000000000..b2c92002f9cc4 --- /dev/null +++ b/bundles/org.openhab.binding.fenecon/README.md @@ -0,0 +1,145 @@ +# FENECON Binding + +The FENECON Binding integrates the [FENECON energy storage system](https://fenecon.de/) device into the openHAB system via [REST-API](https://docs.fenecon.de/_/de/fems/fems-app/OEM_App_REST_JSON.html). + +With the binding, it is possible to request status information from FENECON Home to allow you home automation decisions based on the current energy management. + +This makes it possible, for example, to switch on other consumers such as the dishwasher or washing machine in the case of power overproduction. + +## Supported Things + +Only one Thing is supported: The `fenecon` device. + +This Binding was tested with an [FENECON HOME 10](https://fenecon.de/fenecon-home-10/) device. + +## Discovery + +Auto-discovery is not supported. + +## Thing Configuration + +The FENECON Thing only needs to be configured with the `hostname`, all other parameters are optional and prefilled with the suitable default values: + +| Parameter | Description | +|-----------------|----------------------------------------------------------------------------------| +| hostname | Hostname or IP address of the FENECON device, e.g. 192.168.1.11 | +| password | Password of the FENECON device. The password for guest access is set by default. | +| port | Port of the FENECON device. Default: 8084 | +| refreshInterval | Interval the device is polled in sec. Default 30 seconds | + + +## Channels + +The FENECON binding currently only provides access to read out the values from the energy storage system. + +| Channel | Type | Read/Write | Description | +|------------------------|----------------------|------------|-----------------------------------------------------------------------------| +| state | String | R | FENECON system state: Ok, Info, Warning or Fault | +| lastUpdate | DateTime | R | Last successful update via REST-API from the FENECON system | +| essSoc | Number:Dimensionless | R | Battery state of charge in percent | +| chargerPower | Number:Power | R | Current charger power of energy storage system in watt. | +| dischargerPower | Number:Power | R | Current discharger power of energy storage system in watt. | +| emergencyPowerMode | Switch | R | Indicates if there is grid power is off and the emergency power mode is on. | +| productionActivePower | Number:Power | R | Current active power producer load in watt. | +| sellToGridPower | Number:Power | R | Current sell to grid exchange power in watt. | +| sellToGridEnergy | Number:Energy | R | Total energy exported to the grid in watt per hour. | +| consumptionActivePower | Number:Power | R | Current active power consumer load in watt. | +| buyFromGridPower | Number:Power | R | Current buy from grid exchange power in watt. | +| buyFromGridEnergy | Number:Energy | R | Total energy imported from the grid in watt per hour. | + + +## Full Example + +### fenecon.things + +```java +Thing fenecon:fenecon:1 "FENECON Home" [hostname="192.168.1.11", refreshInterval=5] +``` +### demo.items + +```java +// Sitemap Items +Group Home "MyHome" ["Indoor"] +Group GF "GroundFloor" (Home) ["GroundFloor"] +// Utility room +Group GF_UtilityRoom "Utility room" (Home, GF) ["Room"] +Group GF_UtilityRoomSolar "Utility room solar" (GF_UtilityRoom) ["Inverter"] + +// FENECON items +String EssState (GF_UtilityRoomSolar) ["Status"] {channel="fenecon:fenecon:1:state"} +DateTime LastFeneconUpdate