From 2cd249119a81667195323a96a69bde2871e2bb2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96rjan=20Backsell?= Date: Thu, 7 Nov 2024 17:27:03 +0100 Subject: [PATCH] [ferroamp] Binding for ferroamp 20241107 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes done in: EhubJsonElements.java EsmJsonElements.java EsoJsonElements.java ferroamp.properties FerroampBindingConstants.java FerroampChannelConfiguration.java FerroampConfiguration.java FerroampHandler.java FerroampMqttCommunication.java SsoJsonElements.java thing-types.xml Signed-off-by: Örjan Backsell --- .../org.openhab.binding.ferroamp/README.md | 330 +++++++++--------- .../ferroamp/internal/EhubJsonElements.java | 2 +- .../ferroamp/internal/EsmJsonElements.java | 2 +- .../ferroamp/internal/EsoJsonElements.java | 2 +- .../internal/FerroampBindingConstants.java | 61 ++-- .../FerroampChannelConfiguration.java | 96 +++-- .../internal/FerroampConfiguration.java | 4 - .../ferroamp/internal/FerroampHandler.java | 173 ++++----- .../internal/FerroampMqttCommunication.java | 231 ++++++------ .../ferroamp/internal/SsoJsonElements.java | 2 +- .../resources/OH-INF/i18n/ferroamp.properties | 158 +++++---- .../resources/OH-INF/thing/thing-types.xml | 215 +++++------- 12 files changed, 606 insertions(+), 670 deletions(-) diff --git a/bundles/org.openhab.binding.ferroamp/README.md b/bundles/org.openhab.binding.ferroamp/README.md index db2812ad2c113..6359f332512d5 100644 --- a/bundles/org.openhab.binding.ferroamp/README.md +++ b/bundles/org.openhab.binding.ferroamp/README.md @@ -1,4 +1,4 @@ -## Ferroamp Binding +# Ferroamp Binding The Ferroamp binding is used to get live data from Ferroamp EnergyHub @@ -7,16 +7,19 @@ Data and commands are received/sent using MQTT where the user connects to the MQ *note* Contact Ferroamp support to enable MQTT in the EnergyHub and to get the Username and Password: -https://ferroamp.com/om-ferroamp/ + + +Every Sso has a unique serial number which is marked on the side of the SSO unit. Ex. PS00990-A04-S20120476. +This number is to identify the respective Sso Pv-string. ## Supported Things The binding retrieves data from the different parts of the Ferroamp EnergyHub such as: - `ehub`: EnergyHub Wall and EnergyHub XL. -- `sso`: Solar string optimizer. -- `eso`: Bidirectional DC/DC converter for connection of battery. -- `esm`: Energy Storage Module. +- `sso` : Solar string optimizer. +- `eso` : Bidirectional DC/DC converter for connection of battery. +- `esm` : Energy Storage Module. ## Discovery @@ -32,178 +35,170 @@ The following configuration parameters are available. | userName | text | Username to access the device | N/A | yes | no | | password | text | Password to access the device | N/A | yes | no | | hasBattery | boolean | Has the system a battery connected? | N/A | no | yes | -| ssoS0 | boolean | Has the system, the 1'st Sso Pv-string connected? | N/A | no | no | -| ssoS1 | boolean | Has the system, the 2'nd Sso Pv-string connected? | N/A | no | no | -| ssoS2 | boolean | Has the system, the 3'rd Sso Pv-string connected? | N/A | no | no | -| ssoS3 | boolean | Has the system, the 4'th Sso Pv-string connected? | N/A | no | no | | eso | boolean | Has the system an Eso unit connected? | N/A | no | no | | esm | boolean | Has the system an Esm unit connected? | N/A | no | no | -| The unique serial number is marked on the side of the SSO unit. Ex. PS00990-A04-S20120476 ## Channels -| Channel Type ID | Item Type | Read/Write | Label | Description -|---------------------------------------------------------------------------------------------------------------------------------------------- -| grid-frequency | Number:Frequency | R | Estimated Grid Frequency | Estimated Grid Frequency | -| ace-current-l1 | Number:ElectricCurrent | R | ACE Current L1 | Adaptive Current Equalization (ACE) equalization current set-points in Amps root mean square (Arms) | -| ace-current-l2 | Number:ElectricCurrent | R | ACE Current L2 | Adaptive Current Equalization (ACE) equalization current set-points in Amps root mean square (Arms) | -| ace-current-l3 | Number:ElectricCurrent | R | ACE Current L3 | Adaptive Current Equalization (ACE) equalization current set-points in Amps root mean square (Arms) | -| external-voltage-l1 | Number:ElectricPotential | R | External Voltage L1 | External voltage | -| external-voltage-l2 | Number:ElectricPotential | R | External Voltage L2 | External voltage | -| external-voltage-l3 | Number:ElectricPotential | R | External Voltage L3 | External voltage | -| inverter-rms-current-l1 | Number:ElectricCurrent | R | Inverter RMS Current L1 | Inverter RMS current | -| inverter-rms-current-l2 | Number:ElectricCurrent | R | Inverter RMS Current L2 | Inverter RMS current | -| inverter-rms-current-l3 | Number:ElectricCurrent | R | Inverter RMS Current L3 | Inverter RMS current | -| inverter-current-reactive-l1 | Number:ElectricCurrent | R | Inverter Current Reactive L1 | Inverter reactive current | -| inverter-current-reactive-l2 | Number:ElectricCurrent | R | Inverter Current Reactive L2 | Inverter reactive current | -| inverter-current-reactive-l3 | Number:ElectricCurrent | R | Inverter Current Reactive L3 | Inverter reactive current | -| inverter-current-active-l1 | Number:ElectricCurrent | R | Inverter Active current L1 | Inverter active current | -| inverter-current-active-l2 | Number:ElectricCurrent | R | Inverter Active current L1 | Inverter active current | -| inverter-current-active-l3 | Number:ElectricCurrent | R | Inverter Active current L1 | Inverter active current | -| grid-current-l1 | Number:ElectricCurrent | R | Grid Current L1 | Grid RMS current | -| grid-current-l2 | Number:ElectricCurrent | R | Grid Current L2 | Grid RMS current | -| grid-current-l3 | Number:ElectricCurrent | R | Grid Current L3 | Grid RMS current | -| grid-current-reactive-l1 | Number:ElectricCurrent | R | Grid Current Reactive L1 | Grid current reactive | -| grid-current-reactive-l2 | Number:ElectricCurrent | R | Grid Current Reactive L2 | Grid current reactive | -| grid-current-reactive-l3 | Number:ElectricCurrent | R | Grid Current Reactive L3 | Grid current reactive | -| grid-current-active-l1 | Number:ElectricCurrent | R | Grid Current Active L1 | Grid current active | -| grid-current-active-l2 | Number:ElectricCurrent | R | Grid Current Active L2 | Grid current active | -| grid-current-active-l3 | Number:ElectricCurrent | R | Grid Current Active L3 | Grid current active | -| inverter-reactive-current-l1 | Number:ElectricCurrent | R | Inverter Reactive Current L1 | -| inverter-reactive-current-l2 | Number:ElectricCurrent | R | Inverter Reactive Current L2 | -| inverter-reactive-current-l3 | Number:ElectricCurrent | R | Inverter Reactive Current L3 | -| inverter-load-l1 | Number:ElectricCurrent | R | Inverter Load L1 | -| inverter-load-l2 | Number:ElectricCurrent | R | Inverter Load L2 | -| inverter-load-l3 | Number:ElectricCurrent | R | Inverter Load L3 | -| apparent-power | Number:Energy | R | Apparent Power | Apparent power -| grid-power-active-l1 | Number:Power | R | Grid Power Active L1 | Grid power, active | -| grid-power-active-l2 | Number:Power | R | Grid Power Active L2 | Grid power, active | -| grid-power-active-l3 | Number:Power | R | Grid Power Active L3 | Grid power, active | -| grid-power-reactive-l1 | Number:Power | R | Grid Power Reactive L1 | Grid power, reactive | -| grid-power-reactive-l2 | Number:Power | R | Grid Power Reactive L2 | Grid power, reactive | -| grid-power-reactive-l3 | Number:Power | R | Grid Power Reactive L3 | Grid power, reactive | -| inverter-power-active-l1 | Number:Power | R | Inverter Power Active L1 | Inverter power, active | -| inverter-power-active-l2 | Number:Power | R | Inverter Power Active L2 | Inverter power, active | -| inverter-power-active-l3 | Number:Power | R | Inverter Power Active L3 | Inverter power, active | -| inverter-power-reactive-l1 | Number:Power | R | Inverter Power Reactive L1 | Inverter power, reactive | -| inverter-power-reactive-l1 | Number:Power | R | Inverter Power Reactive L2 | Inverter power, reactive | -| inverter-power-reactive-l1 | Number:Power | R | Inverter Power Reactive L3 | Inverter power, reactive | -| consumption-power-l1 | Number:Power | R | Consumption Power L1 | -| consumption-power-l2 | Number:Power | R | Consumption Power L2 | -| consumption-power-l3 | Number:Power | R | Consumption Power L3 | -| consumption-power-reactive-l1 | Number:Power | R | Consumption Power Reactive L1 | -| consumption-power-reactive-l2 | Number:Power | R | Consumption Power Reactive L2 | -| consumption-power-reactive-l3 | Number:Power | R | Consumption Power Reactive L3 | -| solar-pv | Number:Power | R | Solar Power | Only sent when system has PV | -| positive-dc-link-voltage | Number:ElectricPotential | R | Positiv DC Link Voltage | Positiv DC link voltage | -| negative-dc-link-voltage | Number:ElectricPotential | R | Negative DC Link Voltage | Negative DC link voltage | -| grid-energy-produced-l1 | Number:Energy | R | Grid Energy Produced L1 | -| grid-energy-produced-l2 | Number:Energy | R | Grid Energy Produced L2 | -| grid-energy-produced-l3 | Number:Energy | R | Grid Energy Produced L3 | -| grid-energy-consumed-l1 | Number:Energy | R | Grid Energy Consumed L1 | -| grid-energy-consumed-l2 | Number:Energy | R | Grid Energy Consumed L2 | -| grid-energy-consumed-l3 | Number:Energy | R | Grid Energy Consumed L3 | -| inverter-energy-produced-l1 | Number:Energy | R | Inverter Energy Produced L1 | -| inverter-energy-produced-l2 | Number:Energy | R | Inverter Energy Produced L2 | -| inverter-energy-produced-l3 | Number:Energy | R | Inverter Energy Produced L3 | -| inverter-energy-consumed-l1 | Number:ElectricCurrent | R | Inverter Energy Consumed L1 | -| inverter-energy-consumed-l2 | Number:ElectricCurrent | R | Inverter Energy Consumed L2 | -| inverter-energy-consumed-l3 | Number:ElectricCurrent | R | Inverter Energy Consumed L3 | -| load-energy-produced-l1 | Number:Energy | R | Load Energy Produced L1 | -| load-energy-produced-l2 | Number:Energy | R | Load Energy Produced L2 | -| load-energy-produced-l3 | Number:Energy | R | Load Energy Produced L3 | -| load-energy-consumed-l1 | Number:Energy | R | Load Energy Consumed L1 | -| load-energy-consumed-l2 | Number:Energy | R | Load Energy Consumed L2 | -| load-energy-consumed-l3 | Number:Energy | R | Load Energy Consumed L3 | -| total-grid-energy-produced | Number:Energy | R | Total produced grid energy | -| total-grid-energy-consumed | Number:Energy | R | Total consumed grid energy | -| total-inverter-energy-produced | Number:Energy | R | Total produced inverter energy | -| total-inverter-energy-consumed | Number:Energy | R | Total consumed inverter energy | -| total-load-energy-produced | Number:Energy | R | Total produced load energy | -| total-load-energy-consumed | Number:Energy | R | Total consumed load energy | -| total-solar-energy | Number:Energy | R | Total Solar Energy | Only sent when system has PV | -| state | String | R | State of the System | -| timestamp | DateTime | R | Time Stamp When Message was Published | Time stamp when message was published | -| battery-energy-produced | Number:Energy | R | Battery Energy Produced | Only sent when system has batteries | -| battery-energy-consumed | Number:Energy | R | Battery Energy Consumed | Only sent when system has batteries | -| soc | Number:Dimensionless | R | System State of Check | State of the system | -| soh | Number:Dimensionless | R | System State of Health | -| power-battery | Number:Power | R | Battery Power | Only sent when system has batteries | -| total-capacity-batteries | Number:Energy | R | Total Rated Capacity of All Batteries | - -| s0-id | String | R | S0 ID | Unique identifier of SSO-0 | -| s0-pv-voltage | Number:ElectricPotential | R | S0 Measured Voltage on PV String Side | Measured on PV string side | -| s0-pv-current | Number:ElectricCurrent | R | S0 Measured Current on PV String Side | Measured on PV string side | -| s0-total-solar-energy | Number:Energy | R | S0 Total Solar Energy | Total energy produced by SSO-0 | -| s0-relay-status | Contact | R | S0 Relay Status | 0 = relay closed (i.e running power), 1 = relay open/disconnected, 2 = precharge | -| s0-temperature | Number:Temperature | R | S0 Temperature Measured on PCB | Temperature Measured on PCB | -| s0-fault-code | String | R | S0 FaultCode | 0x00 = OK. For all other values Please contact Ferroamp support | -| s0-dc-link-voltage | Number:ElectricPotential | R | S0 DC Link Voltage | DC link voltage as measured by SSO-0 | -| s0-timestamp | DateTime | R | S0 Time Stamp When Message was Published | Time stamp when message was published | - | -| s1-id | String | R | S1 ID | Unique identifier of SSO-1 | -| s1-pv-voltage | Number:ElectricPotential | R | S1 easured Voltage on PV String Side | Measured on PV string side | -| s1-pv-current | Number:ElectricCurrent | R | S1 Measured Current on PV String Side | Measured on PV string side | -| s1-total-solar-energy | Number:Energy | R | S1 Total Solar Energy | Total energy produced by SSO-1 | -| s1-relay-status | Contact | R | S1 Relay Status | 0 = relay closed (i.e running power), 1 = relay open/disconnected, 2 = precharge | -| s1-temperature | Number:Temperature | R | S1 Temperature Measured on PCB | Temperature Measured on PCB | -| s1-fault-code | String | R | S1 FaultCode | 0x00 = OK. For all other values Please contact Ferroamp support | -| s1-dc-link-voltage | Number:ElectricPotential | R | S1 DC Link Voltage | DC link voltage as measured by SSO-1 | -| s1-timestamp | DateTime | R | S1 Time Stamp When Message was Published | Time stamp when message was published | - | +| Channel Type ID | Item Type | Read/Write | Label | Description | +|--------------------------------------------------------------------|------------|------------------------------------------|------------------------------------------------------------------------------------------------------| +| grid-frequency | Number:Frequency | R | Grid Frequency | Grid frequency | +| ace-current-l1 | Number:ElectricCurrent | R | ACE Current L1 | Adaptive Current Equalization (ACE) equalization current set-points in Amps root mean square (Arms) | +| ace-current-l2 | Number:ElectricCurrent | R | ACE Current L2 | Adaptive Current Equalization (ACE) equalization current set-points in Amps root mean square (Arms) | +| ace-current-l3 | Number:ElectricCurrent | R | ACE Current L3 | Adaptive Current Equalization (ACE) equalization current set-points in Amps root mean square (Arms) | +| grid-voltage-l1 | Number:ElectricPotential | R | Grid Voltage L1 | Grid voltage | +| grid-voltage-l2 | Number:ElectricPotential | R | Grid Voltage L2 | Grid voltage | +| grid-voltage-l3 | Number:ElectricPotential | R | Grid Voltage L3 | Grid voltage | +| inverter-rms-current-l1 | Number:ElectricCurrent | R | Inverter RMS Current L1 | Inverter RMS current | +| inverter-rms-current-l2 | Number:ElectricCurrent | R | Inverter RMS Current L2 | Inverter RMS current | +| inverter-rms-current-l3 | Number:ElectricCurrent | R | Inverter RMS Current L3 | Inverter RMS current | +| inverter-reactive-current-l1 | Number:ElectricCurrent | R | Inverter Reactive Current L1 | Inverter reactive current | +| inverter-reactive-current-l2 | Number:ElectricCurrent | R | Inverter Reactive Current L2 | Inverter reactive current | +| inverter-reactive-current-l3 | Number:ElectricCurrent | R | Inverter Reactive Current L3 | Inverter reactive current | +| inverter-active-current-l1 | Number:ElectricCurrent | R | Inverter Active current L1 | Inverter active current | +| inverter-active-current-l2 | Number:ElectricCurrent | R | Inverter Active current L2 | Inverter active current | +| inverter-active-current-l3 | Number:ElectricCurrent | R | Inverter Active current L3 | Inverter active current | +| grid-current-l1 | Number:ElectricCurrent | R | Grid Current L1 | Grid RMS current | +| grid-current-l2 | Number:ElectricCurrent | R | Grid Current L2 | Grid RMS current | +| grid-current-l3 | Number:ElectricCurrent | R | Grid Current L3 | Grid RMS current | +| grid-reactive-current-l1 | Number:ElectricCurrent | R | Grid Reactive Current L1 | Grid reactive current | +| grid-reactive-current-l2 | Number:ElectricCurrent | R | Grid Reactive Current L2 | Grid reactive current | +| grid-reactive-current-l3 | Number:ElectricCurrent | R | Grid Reactive Current L3 | Grid reactive current | +| grid-active-current-l1 | Number:ElectricCurrent | R | Grid Active Current L1 | Grid active current | +| grid-active-current-l2 | Number:ElectricCurrent | R | Grid Active Current L2 | Grid active current | +| grid-active-current-l3 | Number:ElectricCurrent | R | Grid Active Current L3 | Grid active current | +| inverter-load-reactive-current-l1 | Number:ElectricCurrent | R | Inverter Load Reactive Current L1 | | +| inverter-load-reactive-current-l2 | Number:ElectricCurrent | R | Inverter Load Reactive Current L2 | | +| inverter-load-reactive-current-l3 | Number:ElectricCurrent | R | Inverter Load Reactive Current L3 | | +| inverter-load-active-current-l1 | Number:ElectricCurrent | R | Inverter Load Active Current L1 | | +| inverter-load-active-current-l2 | Number:ElectricCurrent | R | Inverter Load Active Current L2 | | +| inverter-load-active-current-l3 | Number:ElectricCurrent | R | Inverter Load Active Current L3 | | +| apparent-power | Number:Energy | R | Apparent Power | Apparent power | +| grid-power-active-l1 | Number:Power | R | Grid Power Active L1 | Grid power, active | +| grid-power-active-l2 | Number:Power | R | Grid Power Active L2 | Grid power, active | +| grid-power-active-l3 | Number:Power | R | Grid Power Active L3 | Grid power, active | +| grid-power-reactive-l1 | Number:Power | R | Grid Power Reactive L1 | Grid power, reactive | +| grid-power-reactive-l2 | Number:Power | R | Grid Power Reactive L2 | Grid power, reactive | +| grid-power-reactive-l3 | Number:Power | R | Grid Power Reactive L3 | Grid power, reactive | +| inverter-power-active-l1 | Number:Power | R | Inverter Power Active L1 | Inverter power, active | +| inverter-power-active-l2 | Number:Power | R | Inverter Power Active L2 | Inverter power, active | +| inverter-power-active-l3 | Number:Power | R | Inverter Power Active L3 | Inverter power, active | +| inverter-power-reactive-l1 | Number:Power | R | Inverter Power Reactive L1 | Inverter power, reactive | +| inverter-power-reactive-l1 | Number:Power | R | Inverter Power Reactive L2 | Inverter power, reactive | +| inverter-power-reactive-l1 | Number:Power | R | Inverter Power Reactive L3 | Inverter power, reactive | +| consumption-power-l1 | Number:Power | R | Consumption Power L1 | | +| consumption-power-l2 | Number:Power | R | Consumption Power L2 | | +| consumption-power-l3 | Number:Power | R | Consumption Power L3 | | +| consumption-power-reactive-l1 | Number:Power | R | Consumption Power Reactive L1 | | +| consumption-power-reactive-l2 | Number:Power | R | Consumption Power Reactive L2 | | +| consumption-power-reactive-l3 | Number:Power | R | Consumption Power Reactive L3 | | +| solar-pv | Number:Power | R | Solar Power | Only sent when system has PV | +| positive-dc-link-voltage | Number:ElectricPotential | R | Positiv DC Link Voltage | Positiv DC link voltage | +| negative-dc-link-voltage | Number:ElectricPotential | R | Negative DC Link Voltage | Negative DC link voltage | +| grid-energy-produced-l1 | Number:Energy | R | Grid Energy Produced L1 | | +| grid-energy-produced-l2 | Number:Energy | R | Grid Energy Produced L2 | | +| grid-energy-produced-l3 | Number:Energy | R | Grid Energy Produced L3 | | +| grid-energy-consumed-l1 | Number:Energy | R | Grid Energy Consumed L1 | | +| grid-energy-consumed-l2 | Number:Energy | R | Grid Energy Consumed L2 | | +| grid-energy-consumed-l3 | Number:Energy | R | Grid Energy Consumed L3 | | +| inverter-energy-produced-l1 | Number:Energy | R | Inverter Energy Produced L1 | | +| inverter-energy-produced-l2 | Number:Energy | R | Inverter Energy Produced L2 | | +| inverter-energy-produced-l3 | Number:Energy | R | Inverter Energy Produced L3 | | +| inverter-energy-consumed-l1 | Number:ElectricCurrent | R | Inverter Energy Consumed L1 | | +| inverter-energy-consumed-l2 | Number:ElectricCurrent | R | Inverter Energy Consumed L2 | | +| inverter-energy-consumed-l3 | Number:ElectricCurrent | R | Inverter Energy Consumed L3 | | +| load-energy-produced-l1 | Number:Energy | R | Load Energy Produced L1 | | +| load-energy-produced-l2 | Number:Energy | R | Load Energy Produced L2 | | +| load-energy-produced-l3 | Number:Energy | R | Load Energy Produced L3 | | +| load-energy-consumed-l1 | Number:Energy | R | Load Energy Consumed L1 | | +| load-energy-consumed-l2 | Number:Energy | R | Load Energy Consumed L2 | | +| load-energy-consumed-l3 | Number:Energy | R | Load Energy Consumed L3 | | +| grid-energy-produced-total | Number:Energy | R | Grid Energy Produced Total | | +| grid-energy-consumed-total | Number:Energy | R | Grid Energy Consumed Total | | +| inverter-energy-produced-total | Number:Energy | R | Inverter Energy Produced Total | | +| inverter-energy-consumed-total | Number:Energy | R | Inverter Energy Consumed Total | | +| load-energy-produced-total | Number:Energy | R | Load Energy Produced Total | | +| load-energy-consumed-total | Number:Energy | R | Load Energy Consumed Total | | +| total-solar-energy | Number:Energy | R | Total Solar Energy | Only sent when system has PV | +| state | String | R | State of the System | | +| timestamp | DateTime | R | Time Stamp | Time stamp when message was published | +| battery-energy-produced | Number:Energy | R | Battery Energy Produced | Only sent when system has batteries | +| battery-energy-consumed | Number:Energy | R | Battery Energy Consumed | Only sent when system has batteries | +| soc | Number:Dimensionless | R | System State of Check | State of the system | +| soh | Number:Dimensionless | R | System State of Health | | +| power-battery | Number:Power | R | Battery Power | Only sent when system has batteries | +| total-capacity-batteries | Number:Energy | R | Total Capacity Batteries | Total rated capacity of all batteries | + +| s1-id | String | R | S1 ID | Unique identifier of SSO-1 | +| s1-pv-voltage | Number:ElectricPotential | R | S1 Voltage on PV String Side | Measured on PV string side | +| s1-pv-current | Number:ElectricCurrent | R | S1 Current on PV String Side | Measured on PV string side | +| s1-total-solar-energy | Number:Energy | R | S1 Total Solar Energy | Total energy produced by SSO-1 | +| s1-relay-status | Contact | R | S1 Relay Status | 0 = relay closed (i.e running power), 1 = relay open/disconnected, 2 = precharge | +| s1-temperature | Number:Temperature | R | S1 Temperature on PCB | Temperature Measured on PCB | +| s1-fault-code | String | R | S1 FaultCode | 0x00 = OK. For all other values Please contact Ferroamp support | +| s1-dc-link-voltage | Number:ElectricPotential | R | S1 DC Link Voltage | DC link voltage as measured by SSO-1 | +| s1-timestamp | DateTime | R | S1 Time Stamp | Time stamp when message was published | + +| s2-id | String | R | S2 ID | Unique identifier of SSO-2 | +| s2-pv-voltage | Number:ElectricPotential | R | S2 Voltage on PV String Side | Measured on PV string side | +| s2-pv-current | Number:ElectricCurrent | R | S2 Current on PV String Side | Measured on PV string side | +| s2-total-solar-energy | Number:Energy | R | S2 Total Solar Energy | Total energy produced by SSO-2 | +| s2-relay-status | Contact | R | S2 Relay Status | 0 = relay closed (i.e running power), 1 = relay open/disconnected, 2 = precharge | +| s2-temperature | Number:Temperature | R | S2 Temperature on PCB | Temperature Measured on PCB | +| s2-fault-code | String | R | S2 FaultCode | 0x00 = OK. For all other values Please contact Ferroamp support | +| s2-dc-link-voltage | Number:ElectricPotential | R | S2 DC Link Voltage | DC link voltage as measured by SSO-2 | +| s2-timestamp | DateTime | R | S2 Time Stamp | Time stamp when message was published | -| s2-id | String | R | S2 ID | Unique identifier of SSO-2 | -| s2-pv-voltage | Number:ElectricPotential | R | S2 Measured Voltage on PV String Side | Measured on PV string side | -| s2-pv-current | Number:ElectricCurrent | R | S2 Measured Current on PV String Side | Measured on PV string side | -| s2-total-solar-energy | Number:Energy | R | S2 Total Solar Energy | Total energy produced by SSO-2 | -| s2-relay-status | Contact | R | S2 Relay Status | 0 = relay closed (i.e running power), 1 = relay open/disconnected, 2 = precharge | -| s2-temperature | Number:Temperature | R | S2 Temperature Measured on PCB | Temperature Measured on PCB | -| s2-fault-code | String | R | S2 FaultCode | 0x00 = OK. For all other values Please contact Ferroamp support | -| s2-dc-link-voltage | Number:ElectricPotential | R | S2 DC Link Voltage | DC link voltage as measured by SSO-2 | -| s2-timestamp | DateTime | R | S2 Time Stamp When Message was Published | Time stamp when message was published | - | - -| s3-id | String | R | S3 ID | Unique identifier of SSO-3 | -| s3-pv-voltage | Number:ElectricPotential | R | S3 Measured Voltage on PV String Side | Measured on PV string side | -| s3-pv-current | Number:ElectricCurrent | R | S3 Measured Current on PV String Side | Measured on PV string side | -| s3-total-solar-energy | Number:Energy | R | S3 Total Solar Energy | Total energy produced by SSO-3 | -| s3-relay-status | Contact | R | S3 Relay Status | 0 = relay closed (i.e running power), 1 = relay open/disconnected, 2 = precharge | -| s3-temperature | Number:Temperature | R | S3 Temperature Measured on PCB | Temperature Measured on PCB | -| s3-fault-code | String | R | S3 FaultCode | 0x00 = OK. For all other values Please contact Ferroamp support | -| s3-dc-link-voltage | Number:ElectricPotential | R | S3 DC Link Voltage | DC link voltage as measured by SSO-3 | -| s3-timestamp | DateTime | R | S3 Time Stamp When Message was Published | Time stamp when message was published | - | - -| eso-id | String | R | Eso Unique Identifier | Unique identifier | -| eso-voltage-battery | Number:ElectricPotential | R | Eso Voltage Measured on Battery Side | Measured on battery side | -| eso-current-battery | Number:ElectricCurrent | R | Eso Current Measured on Battery Side | Measured on battery side | -| eso-battery-energy-produced | Number:Energy | R | Eso Battery Energy Produced | Total energy produced by ESO, i.e total energy charged | -| eso-battery-energy-consumed | Number:Energy | R | Eso Battery Energy Consumed | Total energy consumed by ESO, i.e total energy discharged | -| eso-soc | Number:Dimensionless | R | Eso State of Charge | State of Charge for ESO | -| eso-relay-status | Contact | R | Eso Relay Status | 0 = relay closed, 1 = relay open | -| eso-temperature | Number:Temperature | R | Eso Temperature Measured on PCB | Measured inside ESO | -| eso-fault-code | String | R | Eso FaultCode | See section 4.1.3.1 in Ferroamp-External-API-specifikation | -| eso-battery-energy-produced | Number:Energy | R | Eso Battery Energy Produced | Total energy produced by ESO, i.e total energy charged | -| eso-dc-link-voltage | Number:ElectricPotential | R | Eso Dc Link Voltage | DC link voltage as measured by ESO | -| eso-timestamp | DateTime | R | Eso Time Stamp When Message was Published| Time stamp when message was published | - - -| esm-id | String | R | Esm Unique Identifier | Unique identifier of battery. If available, this will be the unique id that the battery reports.| -| esm-soh | Number:Dimensionless | R | Esm System State of Health | State of Health for ESM | -| esm-soc | Number:Dimensionless | R | Esm System State of Charge | State of Charge for ESM | -| esm-total-capacity | Number:Energy | R | Esm Rated Capacity | Rated capacity of all batteries | -| esm-power-battery | Number:Power | R | Esm Rated power of battery | Rated power of battery | -| esm-status | String | R | Esm Status | Dependent on battery manufacturer | -| esm-timestamp | DateTime | R | Esm Time Stamp When Message was Published| Time stamp when message was published | +| s3-id | String | R | S3 ID | Unique identifier of SSO-3 | +| s3-pv-voltage | Number:ElectricPotential | R | S3 Voltage on PV String Side | Measured on PV string side | +| s3-pv-current | Number:ElectricCurrent | R | S3 Current on PV String Side | Measured on PV string side | +| s3-total-solar-energy | Number:Energy | R | S3 Total Solar Energy | Total energy produced by SSO-3 | +| s3-relay-status | Contact | R | S3 Relay Status | 0 = relay closed (i.e running power), 1 = relay open/disconnected, 2 = precharge | +| s3-temperature | Number:Temperature | R | S3 Temperature on PCB | Temperature Measured on PCB | +| s3-fault-code | String | R | S3 FaultCode | 0x00 = OK. For all other values Please contact Ferroamp support | +| s3-dc-link-voltage | Number:ElectricPotential | R | S3 DC Link Voltage | DC link voltage as measured by SSO-3 | +| s3-timestamp | DateTime | R | S3 Time Stamp | Time stamp when message was published | + +| s4-id | String | R | S4 ID | Unique identifier of SSO-4 | +| s4-pv-voltage | Number:ElectricPotential | R | S4 Voltage on PV String Side | Measured on PV string side | +| s4-pv-current | Number:ElectricCurrent | R | S4 Current on PV String Side | Measured on PV string side | +| s4-total-solar-energy | Number:Energy | R | S4 Total Solar Energy | Total energy produced by SSO-4 | +| s4-relay-status | Contact | R | S4 Relay Status | 0 = relay closed (i.e running power), 1 = relay open/disconnected, 2 = precharge | +| s4-temperature | Number:Temperature | R | S4 Temperature on PCB | Temperature Measured on PCB | +| s4-fault-code | String | R | S4 FaultCode | 0x00 = OK. For all other values Please contact Ferroamp support | +| s4-dc-link-voltage | Number:ElectricPotential | R | S4 DC Link Voltage | DC link voltage as measured by SSO-4 | +| s4-timestamp | DateTime | R | S4 Time Stamp | Time stamp when message was published | + +| eso-id | String | R | Eso Unique Identifier | Unique identifier of ESO | +| eso-voltage-battery | Number:ElectricPotential | R | Eso Voltage on Battery Side | Measured on battery side | +| eso-current-battery | Number:ElectricCurrent | R | Eso Current on Battery Side | Measured on battery side | +| eso-battery-energy-produced | Number:Energy | R | Eso Battery Energy Produced | Total energy produced by ESO, i.e total energy charged | +| eso-battery-energy-consumed | Number:Energy | R | Eso Battery Energy Consumed | Total energy consumed by ESO, i.e total energy discharged | +| eso-soc | Number:Dimensionless | R | Eso State of Charge | State of Charge for ESO | +| eso-relay-status | Contact | R | Eso Relay Status | 0 = relay closed, 1 = relay open | +| eso-temperature | Number:Temperature | R | Eso Temperature on PCB | Measured inside ESO | +| eso-fault-code | String | R | Eso FaultCode | See section 4.1.3.1 in Ferroamp-External-API-specifikation | +| eso-battery-energy-produced | Number:Energy | R | Eso Battery Energy Produced | Total energy produced by ESO, i.e total energy charged | +| eso-dc-link-voltage | Number:ElectricPotential | R | Eso Dc Link Voltage | DC link voltage as measured by ESO | +| eso-timestamp | DateTime | R | Eso Time Stamp | Time stamp when message was published | + + +| esm-id | String | R | Esm Unique Identifier | Unique identifier of battery. If available, this will be the unique id that the battery reports | +| esm-soh | Number:Dimensionless | R | Esm System State of Health | State of Health for ESM | +| esm-soc | Number:Dimensionless | R | Esm System State of Charge | State of Charge for ESM | +| esm-total-capacity | Number:Energy | R | Esm Rated Capacity | Rated capacity of all batteries | +| esm-power-battery | Number:Power | R | Esm Rated Power of Battery | Rated power of battery | +| esm-status | String | R | Esm Status | Dependent on battery manufacturer | +| esm-timestamp | DateTime | R | Esm Time Stamp | Time stamp when message was published | The following channels are available for `Ferroamp` EnergyHub configuration. Please, see Ferroamp documentation for more details. -| Channel Type ID | Item Type | Read/Write | Description | -|---------------------------------------------------|------------|-------------------------------------------------------------------------| -| request-charge | String | W | Set charge power, value in Watt | -| request-discharge | String | W | Set discharge power, value in Watt | -| request-auto | String | W | Set auto power. Returning control of batteries to system, value as auto.| +| Channel Type ID | Item Type | Read/Write | Description | +|----------------------|----------------------------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| request-charge | String | W | Set charge power, value in Watt | +| request-discharge | String | W | Set discharge power, value in Watt | +| request-auto | String | W | Set auto power. Returning control of batteries to system, value as auto # Full Example @@ -222,7 +217,6 @@ Thing ferroamp:energyhub:myenergyhub [ hostName="energyhub-ip", userName="myUser ``` - ## `demo.items` Example ```java diff --git a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EhubJsonElements.java b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EhubJsonElements.java index d3cb78daf4fef..8e392991d4b13 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EhubJsonElements.java +++ b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EhubJsonElements.java @@ -18,7 +18,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; /** - * The {@link EhubParameters} is responsible for all parameters regarded to EHUB + * The {@link EhubParameters1} is responsible for all parameters regarded to EHUB * * @author Örjan Backsell - Initial contribution * diff --git a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EsmJsonElements.java b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EsmJsonElements.java index 699c3a1d8c8f2..f74da39f04368 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EsmJsonElements.java +++ b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EsmJsonElements.java @@ -19,7 +19,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; /** - * The {@link EhubParameters} is responsible for all parameters regarded to EHUB + * The {@link EhubParameters1} is responsible for all parameters regarded to EHUB * * @author Örjan Backsell - Initial contribution * diff --git a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EsoJsonElements.java b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EsoJsonElements.java index 6468f8bc7c831..d08d038c61655 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EsoJsonElements.java +++ b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/EsoJsonElements.java @@ -18,7 +18,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; /** - * The {@link EhubParameters} is responsible for all parameters regarded to EHUB + * The {@link EhubParameters1} is responsible for all parameters regarded to EHUB * * @author Örjan Backsell - Initial contribution * diff --git a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampBindingConstants.java b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampBindingConstants.java index cbfe21e041eba..9e84f3b99e912 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampBindingConstants.java +++ b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampBindingConstants.java @@ -53,33 +53,33 @@ public class FerroampBindingConstants { public static final String CHANNEL_ACECURRENTL1 = "ace-current-l1"; public static final String CHANNEL_ACECURRENTL2 = "ace-current-l2"; public static final String CHANNEL_ACECURRENTL3 = "ace-current-l3"; - public static final String CHANNEL_EXTERNALVOLTAGEL1 = "external-voltage-l1"; - public static final String CHANNEL_EXTERNALVOLTAGEL2 = "external-voltage-l2"; - public static final String CHANNEL_EXTERNALVOLTAGEL3 = "external-voltage-l3"; + public static final String CHANNEL_GRIDVOLTAGEL1 = "grid-voltage-l1"; + public static final String CHANNEL_GRIDVOLTAGEL2 = "grid-voltage-l2"; + public static final String CHANNEL_GRIDVOLTAGEL3 = "grid-voltage-l3"; public static final String CHANNEL_INVERTERRMSCURRENTL1 = "inverter-rms-current-l1"; public static final String CHANNEL_INVERTERRMSCURRENTL2 = "inverter-rms-current-l2"; public static final String CHANNEL_INVERTERRMSCURRENTL3 = "inverter-rms-current-l3"; - public static final String CHANNEL_INVERTERCURRENTREACTIVEL1 = "inverter-current-reactive-l1"; - public static final String CHANNEL_INVERTERCURRENTREACTIVEL2 = "inverter-current-reactive-l2"; - public static final String CHANNEL_INVERTERCURRENTREACTIVEL3 = "inverter-current-reactive-l3"; - public static final String CHANNEL_INVERTERCURRENTACTIVEL1 = "inverter-current-active-l1"; - public static final String CHANNEL_INVERTERCURRENTACTIVEL2 = "inverter-current-active-l2"; - public static final String CHANNEL_INVERTERCURRENTACTIVEL3 = "inverter-current-active-l3"; - public static final String CHANNEL_GRIDCURRENTL1 = "grid-current-l1"; - public static final String CHANNEL_GRIDCURRENTL2 = "grid-current-l2"; - public static final String CHANNEL_GRIDCURRENTL3 = "grid-current-l3"; - public static final String CHANNEL_GRIDCURRENTREACTIVEL1 = "grid-current-reactive-l1"; - public static final String CHANNEL_GRIDCURRENTREACTIVEL2 = "grid-current-reactive-l2"; - public static final String CHANNEL_GRIDCURRENTREACTIVEL3 = "grid-current-reactive-l3"; - public static final String CHANNEL_GRIDCURRENTACTIVEL1 = "grid-current-active-l1"; - public static final String CHANNEL_GRIDCURRENTACTIVEL2 = "grid-current-active-l2"; - public static final String CHANNEL_GRIDCURRENTACTIVEL3 = "grid-current-active-l3"; public static final String CHANNEL_INVERTERREACTIVECURRENTL1 = "inverter-reactive-current-l1"; public static final String CHANNEL_INVERTERREACTIVECURRENTL2 = "inverter-reactive-current-l2"; public static final String CHANNEL_INVERTERREACTIVECURRENTL3 = "inverter-reactive-current-l3"; - public static final String CHANNEL_INVERTERLOADL1 = "inverter-load-l1"; - public static final String CHANNEL_INVERTERLOADL2 = "inverter-load-l2"; - public static final String CHANNEL_INVERTERLOADL3 = "inverter-load-l3"; + public static final String CHANNEL_INVERTERACTIVECURRENTL1 = "inverter-active-current-l1"; + public static final String CHANNEL_INVERTERACTIVECURRENTL2 = "inverter-active-current-l2"; + public static final String CHANNEL_INVERTERACTIVECURRENTL3 = "inverter-active-current-l3"; + public static final String CHANNEL_GRIDCURRENTL1 = "grid-current-l1"; + public static final String CHANNEL_GRIDCURRENTL2 = "grid-current-l2"; + public static final String CHANNEL_GRIDCURRENTL3 = "grid-current-l3"; + public static final String CHANNEL_GRIDREACTIVECURRENTL1 = "grid-reactive-current-l1"; + public static final String CHANNEL_GRIDREACTIVECURRENTL2 = "grid-reactive-current-l2"; + public static final String CHANNEL_GRIDREACTIVECURRENTL3 = "grid-reactive-current-l3"; + public static final String CHANNEL_GRIDACTIVECURRENTL1 = "grid-active-current-l1"; + public static final String CHANNEL_GRIDACTIVECURRENTL2 = "grid-active-current-l2"; + public static final String CHANNEL_GRIDACTIVECURRENTL3 = "grid-active-current-l3"; + public static final String CHANNEL_INVERTERLOADREACTIVECURRENTL1 = "inverter-load-reactive-current-l1"; + public static final String CHANNEL_INVERTERLOADREACTIVECURRENTL2 = "inverter-load-reactive-current-l2"; + public static final String CHANNEL_INVERTERLOADREACTIVECURRENTL3 = "inverter-load-reactive-current-l3"; + public static final String CHANNEL_INVERTERLOADACTIVECURRENTL1 = "inverter-load-active-current-l1"; + public static final String CHANNEL_INVERTERLOADACTIVECURRENTL2 = "inverter-load-active-current-l2"; + public static final String CHANNEL_INVERTERLOADACTIVECURRENTL3 = "inverter-load-active-current-l3"; public static final String CHANNEL_APPARENTPOWER = "apparent-power"; public static final String CHANNEL_GRIDPOWERACTIVEL1 = "grid-power-active-l1"; public static final String CHANNEL_GRIDPOWERACTIVEL2 = "grid-power-active-l2"; @@ -139,15 +139,6 @@ public class FerroampBindingConstants { public static final String CHANNEL_TOTALCAPACITYBATTERIES = "total-capacity-batteries"; // List of SSO Channel ids - public static final String CHANNEL_S0ID = "s0-id"; - public static final String CHANNEL_S0PVVOLTAGE = "s0-pv-voltage"; - public static final String CHANNEL_S0PVCURRENT = "s0-pv-current"; - public static final String CHANNEL_S0TOTALSOLARENERGY = "s0-total-solar-energy"; - public static final String CHANNEL_S0RELAYSTATUS = "s0-relay-status"; - public static final String CHANNEL_S0TEMPERATURE = "s0-temperature"; - public static final String CHANNEL_S0FAULTCODE = "s0-fault-code"; - public static final String CHANNEL_S0DCLINKVOLTAGE = "s0-dc-link-voltage"; - public static final String CHANNEL_S0TIMESTAMP = "s0-timestamp"; public static final String CHANNEL_S1ID = "s1-id"; public static final String CHANNEL_S1PVVOLTAGE = "s1-pv-voltage"; public static final String CHANNEL_S1PVCURRENT = "s1-pv-current"; @@ -175,6 +166,15 @@ public class FerroampBindingConstants { public static final String CHANNEL_S3FAULTCODE = "s3-fault-code"; public static final String CHANNEL_S3DCLINKVOLTAGE = "s3-dc-link-voltage"; public static final String CHANNEL_S3TIMESTAMP = "s3-timestamp"; + public static final String CHANNEL_S4ID = "s4-id"; + public static final String CHANNEL_S4PVVOLTAGE = "s4-pv-voltage"; + public static final String CHANNEL_S4PVCURRENT = "s4-pv-current"; + public static final String CHANNEL_S4TOTALSOLARENERGY = "s4-total-solar-energy"; + public static final String CHANNEL_S4RELAYSTATUS = "s4-relay-status"; + public static final String CHANNEL_S4TEMPERATURE = "s4-temperature"; + public static final String CHANNEL_S4FAULTCODE = "s4-fault-code"; + public static final String CHANNEL_S4DCLINKVOLTAGE = "s4-dc-link-voltage"; + public static final String CHANNEL_S4TIMESTAMP = "s4-timestamp"; // List of ESO Channel ids public static final String CHANNEL_ESOID = "eso-id"; @@ -202,7 +202,6 @@ public class FerroampBindingConstants { public static final String CHANNEL_REQUESTCHARGE = "request-charge"; public static final String CHANNEL_REQUESTDISCHARGE = "request-discharge"; public static final String CHANNEL_AUTO = "request-auto"; - public static final String CHANNEL_REQUESTEXTAPIVERSION = "request-extapi-version"; public static final Set SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_ENERGYHUB); } diff --git a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampChannelConfiguration.java b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampChannelConfiguration.java index df98b94a87fec..a139e4c8f2f83 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampChannelConfiguration.java +++ b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampChannelConfiguration.java @@ -48,11 +48,11 @@ public static List getChannelConfigurationEhub() { channelConfigurationEhub .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_ACECURRENTL3, Units.AMPERE)); channelConfigurationEhub - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_EXTERNALVOLTAGEL1, Units.VOLT)); + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDVOLTAGEL1, Units.VOLT)); channelConfigurationEhub - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_EXTERNALVOLTAGEL2, Units.VOLT)); + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDVOLTAGEL2, Units.VOLT)); channelConfigurationEhub - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_EXTERNALVOLTAGEL3, Units.VOLT)); + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDVOLTAGEL3, Units.VOLT)); channelConfigurationEhub.add( new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_INVERTERRMSCURRENTL1, Units.AMPERE)); channelConfigurationEhub.add( @@ -60,17 +60,17 @@ public static List getChannelConfigurationEhub() { channelConfigurationEhub.add( new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_INVERTERRMSCURRENTL3, Units.AMPERE)); channelConfigurationEhub.add(new FerroampChannelConfiguration( - FerroampBindingConstants.CHANNEL_INVERTERCURRENTREACTIVEL1, Units.AMPERE)); + FerroampBindingConstants.CHANNEL_INVERTERREACTIVECURRENTL1, Units.AMPERE)); channelConfigurationEhub.add(new FerroampChannelConfiguration( - FerroampBindingConstants.CHANNEL_INVERTERCURRENTREACTIVEL2, Units.AMPERE)); + FerroampBindingConstants.CHANNEL_INVERTERREACTIVECURRENTL2, Units.AMPERE)); channelConfigurationEhub.add(new FerroampChannelConfiguration( - FerroampBindingConstants.CHANNEL_INVERTERCURRENTREACTIVEL3, Units.AMPERE)); + FerroampBindingConstants.CHANNEL_INVERTERREACTIVECURRENTL3, Units.AMPERE)); channelConfigurationEhub.add(new FerroampChannelConfiguration( - FerroampBindingConstants.CHANNEL_INVERTERCURRENTACTIVEL1, Units.AMPERE)); + FerroampBindingConstants.CHANNEL_INVERTERACTIVECURRENTL1, Units.AMPERE)); channelConfigurationEhub.add(new FerroampChannelConfiguration( - FerroampBindingConstants.CHANNEL_INVERTERCURRENTACTIVEL2, Units.AMPERE)); + FerroampBindingConstants.CHANNEL_INVERTERACTIVECURRENTL2, Units.AMPERE)); channelConfigurationEhub.add(new FerroampChannelConfiguration( - FerroampBindingConstants.CHANNEL_INVERTERCURRENTACTIVEL3, Units.AMPERE)); + FerroampBindingConstants.CHANNEL_INVERTERACTIVECURRENTL3, Units.AMPERE)); channelConfigurationEhub .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDCURRENTL1, Units.AMPERE)); channelConfigurationEhub @@ -78,29 +78,29 @@ public static List getChannelConfigurationEhub() { channelConfigurationEhub .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDCURRENTL3, Units.AMPERE)); channelConfigurationEhub.add( - new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDCURRENTREACTIVEL1, Units.AMPERE)); + new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDREACTIVECURRENTL1, Units.AMPERE)); channelConfigurationEhub.add( - new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDCURRENTREACTIVEL2, Units.AMPERE)); + new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDREACTIVECURRENTL2, Units.AMPERE)); channelConfigurationEhub.add( - new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDCURRENTREACTIVEL3, Units.AMPERE)); + new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDREACTIVECURRENTL3, Units.AMPERE)); channelConfigurationEhub.add( - new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDCURRENTACTIVEL1, Units.AMPERE)); + new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDACTIVECURRENTL1, Units.AMPERE)); channelConfigurationEhub.add( - new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDCURRENTACTIVEL2, Units.AMPERE)); + new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDACTIVECURRENTL2, Units.AMPERE)); channelConfigurationEhub.add( - new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDCURRENTACTIVEL3, Units.AMPERE)); + new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_GRIDACTIVECURRENTL3, Units.AMPERE)); channelConfigurationEhub.add(new FerroampChannelConfiguration( - FerroampBindingConstants.CHANNEL_INVERTERREACTIVECURRENTL1, Units.AMPERE)); + FerroampBindingConstants.CHANNEL_INVERTERLOADREACTIVECURRENTL1, Units.AMPERE)); channelConfigurationEhub.add(new FerroampChannelConfiguration( - FerroampBindingConstants.CHANNEL_INVERTERREACTIVECURRENTL2, Units.AMPERE)); + FerroampBindingConstants.CHANNEL_INVERTERLOADREACTIVECURRENTL2, Units.AMPERE)); channelConfigurationEhub.add(new FerroampChannelConfiguration( - FerroampBindingConstants.CHANNEL_INVERTERREACTIVECURRENTL3, Units.AMPERE)); - channelConfigurationEhub - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_INVERTERLOADL1, Units.AMPERE)); - channelConfigurationEhub - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_INVERTERLOADL2, Units.AMPERE)); - channelConfigurationEhub - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_INVERTERLOADL3, Units.AMPERE)); + FerroampBindingConstants.CHANNEL_INVERTERLOADREACTIVECURRENTL3, Units.AMPERE)); + channelConfigurationEhub.add(new FerroampChannelConfiguration( + FerroampBindingConstants.CHANNEL_INVERTERLOADACTIVECURRENTL1, Units.AMPERE)); + channelConfigurationEhub.add(new FerroampChannelConfiguration( + FerroampBindingConstants.CHANNEL_INVERTERLOADACTIVECURRENTL2, Units.AMPERE)); + channelConfigurationEhub.add(new FerroampChannelConfiguration( + FerroampBindingConstants.CHANNEL_INVERTERLOADACTIVECURRENTL3, Units.AMPERE)); channelConfigurationEhub.add( new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_APPARENTPOWER, Units.VOLT_AMPERE)); channelConfigurationEhub.add( @@ -214,29 +214,6 @@ public static List getChannelConfigurationEhub() { return channelConfigurationEhub; } - public static List getChannelConfigurationSsoS0() { - final List channelConfigurationSsoS0 = new ArrayList<>(); - channelConfigurationSsoS0 - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S0ID, Units.ONE)); - channelConfigurationSsoS0 - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S0PVVOLTAGE, Units.VOLT)); - channelConfigurationSsoS0 - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S0PVCURRENT, Units.AMPERE)); - channelConfigurationSsoS0 - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S0TOTALSOLARENERGY, Units.WATT)); - channelConfigurationSsoS0 - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S0RELAYSTATUS, Units.ONE)); - channelConfigurationSsoS0 - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S0TEMPERATURE, Units.ONE)); - channelConfigurationSsoS0 - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S0FAULTCODE, Units.ONE)); - channelConfigurationSsoS0 - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S0DCLINKVOLTAGE, Units.VOLT)); - channelConfigurationSsoS0 - .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S0TIMESTAMP, Units.ONE)); - return channelConfigurationSsoS0; - } - public static List getChannelConfigurationSsoS1() { final List channelConfigurationSsoS1 = new ArrayList<>(); channelConfigurationSsoS1 @@ -306,6 +283,29 @@ public static List getChannelConfigurationSsoS3() return channelConfigurationSsoS3; } + public static List getChannelConfigurationSsoS4() { + final List channelConfigurationSsoS4 = new ArrayList<>(); + channelConfigurationSsoS4 + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S4ID, Units.ONE)); + channelConfigurationSsoS4 + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S4PVVOLTAGE, Units.VOLT)); + channelConfigurationSsoS4 + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S4PVCURRENT, Units.AMPERE)); + channelConfigurationSsoS4 + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S4TOTALSOLARENERGY, Units.WATT)); + channelConfigurationSsoS4 + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S4RELAYSTATUS, Units.ONE)); + channelConfigurationSsoS4 + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S4TEMPERATURE, Units.ONE)); + channelConfigurationSsoS4 + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S4FAULTCODE, Units.ONE)); + channelConfigurationSsoS4 + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S4DCLINKVOLTAGE, Units.VOLT)); + channelConfigurationSsoS4 + .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_S4TIMESTAMP, Units.ONE)); + return channelConfigurationSsoS4; + } + public static List getChannelConfigurationEso() { final List channelConfigurationEso = new ArrayList<>(); channelConfigurationEso @@ -360,8 +360,6 @@ public static List getChannelConfigurationRequest( .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_REQUESTDISCHARGE, Units.ONE)); channelConfigurationRequest .add(new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_AUTO, Units.ONE)); - channelConfigurationRequest.add( - new FerroampChannelConfiguration(FerroampBindingConstants.CHANNEL_REQUESTEXTAPIVERSION, Units.ONE)); return channelConfigurationRequest; } } diff --git a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampConfiguration.java b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampConfiguration.java index ccc15d1d3dc46..878afe3df510b 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampConfiguration.java +++ b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampConfiguration.java @@ -27,10 +27,6 @@ public class FerroampConfiguration { public String userName = ""; public String password = ""; public boolean hasBattery; - public boolean ssoS0; - public boolean ssoS1; - public boolean ssoS2; - public boolean ssoS3; public boolean eso; public boolean esm; } diff --git a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampHandler.java b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampHandler.java index 753e543965063..8be70518dcb3f 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampHandler.java +++ b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampHandler.java @@ -41,16 +41,15 @@ @NonNullByDefault public class FerroampHandler extends BaseThingHandler implements MqttMessageSubscriber { private final static Logger logger = LoggerFactory.getLogger(FerroampHandler.class); - - private static @Nullable FerroampConfiguration ferroampConfig; private @Nullable static MqttBrokerConnection ferroampConnection; FerroampMqttCommunication ferroampMqttCommunication = new FerroampMqttCommunication(thing); + final FerroampConfiguration ferroampConfig = getConfigAs(FerroampConfiguration.class); private List channelConfigEhub = new ArrayList<>(); - private static List channelConfigSsoS0 = new ArrayList<>(); private static List channelConfigSsoS1 = new ArrayList<>(); private static List channelConfigSsoS2 = new ArrayList<>(); private static List channelConfigSsoS3 = new ArrayList<>(); + private static List channelConfigSsoS4 = new ArrayList<>(); private static List channelConfigEso = new ArrayList<>(); private static List channelConfigEsm = new ArrayList<>(); @@ -66,79 +65,64 @@ public FerroampHandler(Thing thing) { public void handleCommand(ChannelUID channelUID, Command command) { String transId = UUID.randomUUID().toString(); String valueConfiguration = command.toString(); - if (FerroampBindingConstants.CHANNEL_REQUESTCHARGE.equals(channelUID.getId())) { String requestCmdJsonCharge = "{\"" + "transId" + "\":\"" + transId + "\",\"cmd\":{\"name\":\"charge\",\"arg\":\"" + valueConfiguration + "\"}}"; - sendMQTT(requestCmdJsonCharge); + FerroampMqttCommunication.sendMQTT(requestCmdJsonCharge, ferroampConfig); } if (FerroampBindingConstants.CHANNEL_REQUESTDISCHARGE.equals(channelUID.getId())) { String requestCmdJsonDisCharge = "{\"" + "transId" + "\":\"" + transId + "\",\"cmd\":{\"name\":\"discharge\",\"arg\":\"" + valueConfiguration + "\"}}"; - sendMQTT(requestCmdJsonDisCharge); + FerroampMqttCommunication.sendMQTT(requestCmdJsonDisCharge, ferroampConfig); } if (FerroampBindingConstants.CHANNEL_AUTO.equals(channelUID.getId())) { String requestCmdJsonAuto = "{\"" + "transId" + "\":\"" + transId + "\",\"cmd\":{\"name\":\"auto\"}}"; - sendMQTT(requestCmdJsonAuto); + FerroampMqttCommunication.sendMQTT(requestCmdJsonAuto, ferroampConfig); } } - @SuppressWarnings("null") @Override public void initialize() { // Set channel configuration parameters channelConfigEhub = FerroampChannelConfiguration.getChannelConfigurationEhub(); - channelConfigSsoS0 = FerroampChannelConfiguration.getChannelConfigurationSsoS0(); channelConfigSsoS1 = FerroampChannelConfiguration.getChannelConfigurationSsoS1(); channelConfigSsoS2 = FerroampChannelConfiguration.getChannelConfigurationSsoS2(); channelConfigSsoS3 = FerroampChannelConfiguration.getChannelConfigurationSsoS3(); + channelConfigSsoS4 = FerroampChannelConfiguration.getChannelConfigurationSsoS4(); channelConfigEso = FerroampChannelConfiguration.getChannelConfigurationEso(); channelConfigEsm = FerroampChannelConfiguration.getChannelConfigurationEsm(); - ferroampConfig = getConfigAs(FerroampConfiguration.class); - - @SuppressWarnings("null") final MqttBrokerConnection ferroampConnection = new MqttBrokerConnection(ferroampConfig.hostName, FerroampBindingConstants.BROKER_PORT, false, false, ferroampConfig.userName); - updateStatus(ThingStatus.UNKNOWN); - scheduler.execute(() -> { - boolean thingReachable = true; - - if (thingReachable) { - updateStatus(ThingStatus.ONLINE); - try { - startMqttConnection(); - } catch (InterruptedException e) { - logger.debug("Connection to MqttBroker disturbed during configuration"); - } - } else { - updateStatus(ThingStatus.OFFLINE); - thingReachable = false; + try { + startMqttConnection(); + } catch (InterruptedException e) { + logger.debug("Faulty startMqttConnection()"); } }); - // Start channel-update as configured - scheduler.scheduleWithFixedDelay(() -> { - if (getFerroampConnection().connectionState().toString().equals("DISCONNECTED")) { - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR); - logger.debug("Problem connection to MqttBroker"); - } else { - try { - channelUpdate(); - updateStatus(ThingStatus.ONLINE); - } catch (RuntimeException scheduleWithFixedDelayException) { - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, - scheduleWithFixedDelayException.getClass().getName() + ":" - + scheduleWithFixedDelayException.getMessage()); - } - } - }, 60, refreshInterval, TimeUnit.SECONDS); - + scheduler.scheduleWithFixedDelay(this::pollTask, 60, refreshInterval, TimeUnit.SECONDS); this.setFerroampConnection(ferroampConnection); } + private void pollTask() { + if (getFerroampConnection().connectionState().toString().equals("DISCONNECTED")) { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR); + logger.debug("Problem connection to MqttBroker"); + } else { + try { + channelUpdate(); + updateStatus(ThingStatus.ONLINE); + } catch (RuntimeException scheduleWithFixedDelayException) { + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, + scheduleWithFixedDelayException.getClass().getName() + ":" + + scheduleWithFixedDelayException.getMessage()); + } + } + } + private void startMqttConnection() throws InterruptedException { try { TimeUnit.SECONDS.sleep(10); @@ -151,7 +135,6 @@ private void startMqttConnection() throws InterruptedException { ferroampMqttCommunication.getMQTT("esmTopic", ferroampConfig); } - @SuppressWarnings("null") private void channelUpdate() { String[] ehubUpdateChannels; ehubUpdateChannels = FerroampMqttCommunication.getEhubChannelUpdateValues(); @@ -163,59 +146,51 @@ private void channelUpdate() { channelValuesCounterEhub++; } - if (ferroampConfig.ssoS0 == true) { - String[] ssoS0UpdateChannels = new String[9]; - ssoS0UpdateChannels = FerroampMqttCommunication.getSsoS0ChannelUpdateValues(); - int channelValuesCounterSsoS0 = 0; - if (ssoS0UpdateChannels.length <= 9) { - for (FerroampChannelConfiguration cConfig : channelConfigSsoS0) { - String ssoS0Channel = cConfig.id; - State ssoS0State = StringType.valueOf(ssoS0UpdateChannels[channelValuesCounterSsoS0]); - updateState(ssoS0Channel, ssoS0State); - channelValuesCounterSsoS0++; - } + String[] ssoS1UpdateChannels = new String[9]; + ssoS1UpdateChannels = FerroampMqttCommunication.getSsoS1ChannelUpdateValues(); + int channelValuesCounterSsoS1 = 0; + if (ssoS1UpdateChannels.length <= 9) { + for (FerroampChannelConfiguration cConfig : channelConfigSsoS1) { + String ssoS1Channel = cConfig.id; + State ssoS1State = StringType.valueOf(ssoS1UpdateChannels[channelValuesCounterSsoS1]); + updateState(ssoS1Channel, ssoS1State); + channelValuesCounterSsoS1++; } } - if (ferroampConfig.ssoS1 == true) { - String[] ssoS1UpdateChannels = new String[9]; - ssoS1UpdateChannels = FerroampMqttCommunication.getSsoS1ChannelUpdateValues(); - int channelValuesCounterSsoS1 = 0; - if (ssoS1UpdateChannels.length <= 9) { - for (FerroampChannelConfiguration cConfig : channelConfigSsoS1) { - String ssoS1Channel = cConfig.id; - State ssoS1State = StringType.valueOf(ssoS1UpdateChannels[channelValuesCounterSsoS1]); - updateState(ssoS1Channel, ssoS1State); - channelValuesCounterSsoS1++; - } + String[] ssoS2UpdateChannels = new String[9]; + ssoS2UpdateChannels = FerroampMqttCommunication.getSsoS2ChannelUpdateValues(); + int channelValuesCounterSsoS2 = 0; + if (ssoS2UpdateChannels.length <= 9) { + for (FerroampChannelConfiguration cConfig : channelConfigSsoS2) { + String ssoS2Channel = cConfig.id; + State ssoS2State = StringType.valueOf(ssoS2UpdateChannels[channelValuesCounterSsoS2]); + updateState(ssoS2Channel, ssoS2State); + channelValuesCounterSsoS2++; } } - if (ferroampConfig.ssoS2 == true) { - String[] ssoS2UpdateChannels = new String[9]; - ssoS2UpdateChannels = FerroampMqttCommunication.getSsoS2ChannelUpdateValues(); - int channelValuesCounterSsoS2 = 0; - if (ssoS2UpdateChannels.length <= 9) { - for (FerroampChannelConfiguration cConfig : channelConfigSsoS2) { - String ssoS2Channel = cConfig.id; - State ssoS2State = StringType.valueOf(ssoS2UpdateChannels[channelValuesCounterSsoS2]); - updateState(ssoS2Channel, ssoS2State); - channelValuesCounterSsoS2++; - } + String[] ssoS3UpdateChannels = new String[9]; + ssoS3UpdateChannels = FerroampMqttCommunication.getSsoS3ChannelUpdateValues(); + int channelValuesCounterSsoS3 = 0; + if (ssoS3UpdateChannels.length <= 9) { + for (FerroampChannelConfiguration cConfig : channelConfigSsoS3) { + String ssoS3Channel = cConfig.id; + State ssoS3State = StringType.valueOf(ssoS3UpdateChannels[channelValuesCounterSsoS3]); + updateState(ssoS3Channel, ssoS3State); + channelValuesCounterSsoS3++; } } - if (ferroampConfig.ssoS3 == true) { - String[] ssoS3UpdateChannels = new String[9]; - ssoS3UpdateChannels = FerroampMqttCommunication.getSsoS3ChannelUpdateValues(); - int channelValuesCounterSsoS3 = 0; - if (ssoS3UpdateChannels.length <= 9) { - for (FerroampChannelConfiguration cConfig : channelConfigSsoS3) { - String ssoS3Channel = cConfig.id; - State ssoS3State = StringType.valueOf(ssoS3UpdateChannels[channelValuesCounterSsoS3]); - updateState(ssoS3Channel, ssoS3State); - channelValuesCounterSsoS3++; - } + String[] ssoS4UpdateChannels = new String[9]; + ssoS4UpdateChannels = FerroampMqttCommunication.getSsoS4ChannelUpdateValues(); + int channelValuesCounterSsoS4 = 0; + if (ssoS4UpdateChannels.length <= 9) { + for (FerroampChannelConfiguration cConfig : channelConfigSsoS4) { + String ssoS4Channel = cConfig.id; + State ssoS4State = StringType.valueOf(ssoS4UpdateChannels[channelValuesCounterSsoS4]); + updateState(ssoS4Channel, ssoS4State); + channelValuesCounterSsoS4++; } } @@ -244,18 +219,6 @@ private void channelUpdate() { } } - // Handles request topic - @SuppressWarnings("null") - private void sendMQTT(String payload) { - MqttBrokerConnection localConfigurationConnection = getFerroampConnection(); - localConfigurationConnection.start(); - localConfigurationConnection.setCredentials(ferroampConfig.userName, ferroampConfig.password); - - if (localConfigurationConnection != null) { - localConfigurationConnection.publish(FerroampBindingConstants.REQUEST_TOPIC, payload.getBytes(), 1, false); - } - } - // Capture actual Json-topic message @Override public void processMessage(String topic, byte[] payload) { @@ -273,14 +236,4 @@ public void processMessage(String topic, byte[] payload) { public void setFerroampConnection(@Nullable MqttBrokerConnection ferroampConnection) { FerroampHandler.ferroampConnection = ferroampConnection; } - - @SuppressWarnings({ "null" }) - public static boolean gethasBattery() { - try { - return ferroampConfig.hasBattery; - } catch (Exception e) { - logger.debug("Failed at check of configuration-parameter, hasBattery"); - } - return ferroampConfig.hasBattery; - } } diff --git a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampMqttCommunication.java b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampMqttCommunication.java index 0134f470d273d..5c6acc0fb9316 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampMqttCommunication.java +++ b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/FerroampMqttCommunication.java @@ -13,7 +13,6 @@ package org.openhab.binding.ferroamp.internal; import java.nio.charset.StandardCharsets; -import java.util.concurrent.TimeUnit; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.ferroamp.dto.GetGeneralLx; @@ -37,22 +36,19 @@ public class FerroampMqttCommunication implements MqttMessageSubscriber { - private @Nullable FerroampConfiguration ferroampConfig; - private @Nullable static MqttBrokerConnection ferroampConnection; - static String[] ehubChannelsUpdateValues; - static String[] ssoS0ChannelsUpdateValues; static String[] ssoS1ChannelsUpdateValues; static String[] ssoS2ChannelsUpdateValues; static String[] ssoS3ChannelsUpdateValues; + static String[] ssoS4ChannelsUpdateValues; static String[] esoChannelsUpdateValues; static String[] esmChannelsUpdateValues; static boolean isSsoChecked = false; - static String ssoS0IdCheck = ""; static String ssoS1IdCheck = ""; static String ssoS2IdCheck = ""; static String ssoS3IdCheck = ""; + static String ssoS4IdCheck = ""; static boolean isEsoAvailable = false; static boolean isEsmAvailable = false; @@ -64,29 +60,20 @@ public FerroampMqttCommunication(Thing thing) { } // Handles request topic - @SuppressWarnings("null") - void sendMQTT(String payload) { - MqttBrokerConnection localConfigurationConnection = ferroampConnection; - if (FerroampHandler.getFerroampConnection() == null) { - try { - TimeUnit.SECONDS.sleep(10); - } catch (InterruptedException e) { - logger.debug("Failed during waiting for connection to setup"); - } - } + static void sendMQTT(String payload, FerroampConfiguration ferroampConfig) { + + MqttBrokerConnection localConfigurationConnection = FerroampHandler.getFerroampConnection(); localConfigurationConnection.start(); localConfigurationConnection.setCredentials(ferroampConfig.userName, ferroampConfig.password); - - if (localConfigurationConnection != null) { - localConfigurationConnection.publish(FerroampBindingConstants.REQUEST_TOPIC, payload.getBytes(), 1, false); - } + localConfigurationConnection.publish(FerroampBindingConstants.REQUEST_TOPIC, payload.getBytes(), 1, false); } // Handles respective topic type - @SuppressWarnings("null") - void getMQTT(String topic, FerroampConfiguration ferroampConfig) throws InterruptedException { + void getMQTT(String topic, FerroampConfiguration ferroampConfig) { + MqttBrokerConnection localSubscribeConnection = FerroampHandler.getFerroampConnection(); + localSubscribeConnection.start(); localSubscribeConnection.setCredentials(ferroampConfig.userName, ferroampConfig.password); @@ -121,12 +108,14 @@ public void processMessage(String topic, byte[] payload) { } } - @SuppressWarnings("null") + // @SuppressWarnings("null") // Prepare actual Json-topic Ehub-message and update values for channels void processIncomingJsonMessageEhub(String topic, String messageJsonEhub) { String[] ehubChannelPostsValue = new String[86]; // Array for EHUB (Energy Hub) Posts + JsonObject jsonElementsObject = new Gson().fromJson(new Gson().fromJson(messageJsonEhub, JsonObject.class), JsonObject.class); + String jsonElementsStringTemp = ""; Gson gson = new Gson(); @@ -352,41 +341,41 @@ void processIncomingJsonMessageEhub(String topic, String messageJsonEhub) { } // Prepare actual Json-topic Sso-messages and update values for channels - @SuppressWarnings("null") + // @SuppressWarnings("null") void processIncomingJsonMessageSso(String topic, String messageJsonSso) { - String[] ssoS0ChannelPostsValue = new String[9]; // Array for SSOS0 ( Solar String Optimizer ) Posts String[] ssoS1ChannelPostsValue = new String[9]; // Array for SSOS1 ( Solar String Optimizer ) Posts String[] ssoS2ChannelPostsValue = new String[9]; // Array for SSOS2 ( Solar String Optimizer ) Posts String[] ssoS3ChannelPostsValue = new String[9]; // Array for SSOS3 ( Solar String Optimizer ) Posts + String[] ssoS4ChannelPostsValue = new String[9]; // Array for SSOS4 ( Solar String Optimizer ) Posts - String jsonElementsStringTempS0 = ""; String jsonElementsStringTempS1 = ""; String jsonElementsStringTempS2 = ""; String jsonElementsStringTempS3 = ""; + String jsonElementsStringTempS4 = ""; Gson gson = new Gson(); - JsonObject jsonElementsObjectSsoS0 = new Gson().fromJson(new Gson().fromJson(messageJsonSso, JsonObject.class), + JsonObject jsonElementsObjectSsoS1 = new Gson().fromJson(new Gson().fromJson(messageJsonSso, JsonObject.class), JsonObject.class); - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(0)).toString(); - GetGeneralValues idS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - GetGeneralValues idSso = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); + jsonElementsStringTempS1 = jsonElementsObjectSsoS1.get(SsoJsonElements.getJsonElementsSso().get(0)).toString(); + GetGeneralValues idS1 = gson.fromJson(jsonElementsStringTempS1, GetGeneralValues.class); + GetGeneralValues idSso = gson.fromJson(jsonElementsStringTempS1, GetGeneralValues.class); if (isSsoChecked == false) { - if (ssoS0IdCheck.isEmpty() && ssoS1IdCheck.isEmpty() && ssoS2IdCheck.isEmpty() && ssoS3IdCheck.isEmpty()) { - ssoS0IdCheck = idSso.getVal(); + if (ssoS1IdCheck.isEmpty() && ssoS2IdCheck.isEmpty() && ssoS3IdCheck.isEmpty() && ssoS4IdCheck.isEmpty()) { + ssoS1IdCheck = idSso.getVal(); } else { - if (!ssoS0IdCheck.isEmpty() && ssoS1IdCheck.isEmpty() && ssoS2IdCheck.isEmpty() - && ssoS3IdCheck.isEmpty()) { - ssoS1IdCheck = idSso.getVal(); + if (!ssoS1IdCheck.isEmpty() && ssoS2IdCheck.isEmpty() && ssoS3IdCheck.isEmpty() + && ssoS4IdCheck.isEmpty()) { + ssoS2IdCheck = idSso.getVal(); // isSsoChecked = true; } else { - if (!ssoS0IdCheck.isEmpty() && !ssoS1IdCheck.isEmpty() && ssoS2IdCheck.isEmpty() - && ssoS3IdCheck.isEmpty()) { - ssoS2IdCheck = idSso.getVal(); + if (!ssoS1IdCheck.isEmpty() && !ssoS2IdCheck.isEmpty() && ssoS3IdCheck.isEmpty() + && ssoS4IdCheck.isEmpty()) { + ssoS3IdCheck = idSso.getVal(); } else { - if (!ssoS0IdCheck.isEmpty() && !ssoS1IdCheck.isEmpty() && !ssoS2IdCheck.isEmpty() - && ssoS3IdCheck.isEmpty()) { - ssoS3IdCheck = idSso.getVal(); + if (!ssoS1IdCheck.isEmpty() && !ssoS2IdCheck.isEmpty() && !ssoS3IdCheck.isEmpty() + && ssoS4IdCheck.isEmpty()) { + ssoS4IdCheck = idSso.getVal(); isSsoChecked = true; } } @@ -394,69 +383,6 @@ void processIncomingJsonMessageSso(String topic, String messageJsonSso) { } } - if (idS0.getVal().equals(ssoS0IdCheck)) { - // id - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(0)) - .toString(); - idS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - ssoS0ChannelPostsValue[0] = idS0.getVal(); - - // upv - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(1)) - .toString(); - GetGeneralValues upvS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - ssoS0ChannelPostsValue[1] = upvS0.getVal(); - - // ipv - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(2)) - .toString(); - GetGeneralValues ipvS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - ssoS0ChannelPostsValue[2] = ipvS0.getVal(); - - // wpv - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(3)) - .toString(); - GetGeneralValues wpvS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - ssoS0ChannelPostsValue[3] = mJTokWh(jsonStripOneLiners(wpvS0.getVal())); - - // relaystatus - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(4)) - .toString(); - GetGeneralValues relaystatusS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - ssoS0ChannelPostsValue[4] = relaystatusS0.getVal(); - - // temp - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(5)) - .toString(); - GetGeneralValues tempS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - ssoS0ChannelPostsValue[5] = tempS0.getVal(); - - // faultcode - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(6)) - .toString(); - GetGeneralValues faultcodeS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - ssoS0ChannelPostsValue[6] = faultcodeS0.getVal(); - - // udc - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(7)) - .toString(); - GetGeneralValues udcS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - ssoS0ChannelPostsValue[7] = udcS0.getVal(); - - // ts - jsonElementsStringTempS0 = jsonElementsObjectSsoS0.get(SsoJsonElements.getJsonElementsSso().get(8)) - .toString(); - GetGeneralValues tsS0 = gson.fromJson(jsonElementsStringTempS0, GetGeneralValues.class); - ssoS0ChannelPostsValue[8] = tsS0.getVal(); - - ssoS0ChannelsUpdateValues = ssoS0ChannelPostsValue; - } - - JsonObject jsonElementsObjectSsoS1 = new Gson().fromJson(new Gson().fromJson(messageJsonSso, JsonObject.class), - JsonObject.class); - jsonElementsStringTempS1 = jsonElementsObjectSsoS1.get(SsoJsonElements.getJsonElementsSso().get(0)).toString(); - GetGeneralValues idS1 = gson.fromJson(jsonElementsStringTempS1, GetGeneralValues.class); - if (idS1.getVal().equals(ssoS1IdCheck)) { // id jsonElementsStringTempS1 = jsonElementsObjectSsoS1.get(SsoJsonElements.getJsonElementsSso().get(0)) @@ -503,8 +429,8 @@ void processIncomingJsonMessageSso(String topic, String messageJsonSso) { // udc jsonElementsStringTempS1 = jsonElementsObjectSsoS1.get(SsoJsonElements.getJsonElementsSso().get(7)) .toString(); - GetGeneralValues udc = gson.fromJson(jsonElementsStringTempS1, GetGeneralValues.class); - ssoS1ChannelPostsValue[7] = udc.getVal(); + GetGeneralValues udcS1 = gson.fromJson(jsonElementsStringTempS1, GetGeneralValues.class); + ssoS1ChannelPostsValue[7] = udcS1.getVal(); // ts jsonElementsStringTempS1 = jsonElementsObjectSsoS1.get(SsoJsonElements.getJsonElementsSso().get(8)) @@ -566,8 +492,8 @@ void processIncomingJsonMessageSso(String topic, String messageJsonSso) { // udc jsonElementsStringTempS2 = jsonElementsObjectSsoS2.get(SsoJsonElements.getJsonElementsSso().get(7)) .toString(); - GetGeneralValues udcS2 = gson.fromJson(jsonElementsStringTempS2, GetGeneralValues.class); - ssoS2ChannelPostsValue[7] = udcS2.getVal(); + GetGeneralValues udc = gson.fromJson(jsonElementsStringTempS2, GetGeneralValues.class); + ssoS2ChannelPostsValue[7] = udc.getVal(); // ts jsonElementsStringTempS2 = jsonElementsObjectSsoS2.get(SsoJsonElements.getJsonElementsSso().get(8)) @@ -623,8 +549,8 @@ void processIncomingJsonMessageSso(String topic, String messageJsonSso) { // faultcode jsonElementsStringTempS3 = jsonElementsObjectSsoS3.get(SsoJsonElements.getJsonElementsSso().get(6)) .toString(); - GetGeneralValues faultcode = gson.fromJson(jsonElementsStringTempS3, GetGeneralValues.class); - ssoS3ChannelPostsValue[6] = faultcode.getVal(); + GetGeneralValues faultcodeS3 = gson.fromJson(jsonElementsStringTempS3, GetGeneralValues.class); + ssoS3ChannelPostsValue[6] = faultcodeS3.getVal(); // udc jsonElementsStringTempS3 = jsonElementsObjectSsoS3.get(SsoJsonElements.getJsonElementsSso().get(7)) @@ -640,9 +566,72 @@ void processIncomingJsonMessageSso(String topic, String messageJsonSso) { ssoS3ChannelsUpdateValues = ssoS3ChannelPostsValue; } + + JsonObject jsonElementsObjectSsoS4 = new Gson().fromJson(new Gson().fromJson(messageJsonSso, JsonObject.class), + JsonObject.class); + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(0)).toString(); + GetGeneralValues idS4 = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + + if (idS4.getVal().equals(ssoS4IdCheck)) { + // id + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(0)) + .toString(); + idS4 = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + ssoS4ChannelPostsValue[0] = idS4.getVal(); + + // upv + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(1)) + .toString(); + GetGeneralValues upvS4 = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + ssoS4ChannelPostsValue[1] = upvS4.getVal(); + + // ipv + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(2)) + .toString(); + GetGeneralValues ipvS4 = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + ssoS4ChannelPostsValue[2] = ipvS4.getVal(); + + // wpv + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(3)) + .toString(); + GetGeneralValues wpvS4 = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + ssoS4ChannelPostsValue[3] = mJTokWh(jsonStripOneLiners(wpvS4.getVal())); + + // relaystatus + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(4)) + .toString(); + GetGeneralValues relaystatusS4 = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + ssoS4ChannelPostsValue[4] = relaystatusS4.getVal(); + + // temp + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(5)) + .toString(); + GetGeneralValues tempS4 = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + ssoS4ChannelPostsValue[5] = tempS4.getVal(); + + // faultcode + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(6)) + .toString(); + GetGeneralValues faultcode = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + ssoS4ChannelPostsValue[6] = faultcode.getVal(); + + // udc + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(7)) + .toString(); + GetGeneralValues udcS4 = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + ssoS4ChannelPostsValue[7] = udcS4.getVal(); + + // ts + jsonElementsStringTempS4 = jsonElementsObjectSsoS4.get(SsoJsonElements.getJsonElementsSso().get(8)) + .toString(); + GetGeneralValues tsS4 = gson.fromJson(jsonElementsStringTempS4, GetGeneralValues.class); + ssoS4ChannelPostsValue[8] = tsS4.getVal(); + + ssoS4ChannelsUpdateValues = ssoS4ChannelPostsValue; + } } - @SuppressWarnings("null") + // @SuppressWarnings("null") // Prepare actual Json-topic Eso-message and update values for channels void processIncomingJsonMessageEso(String topic, String messageJsonEso) { String[] esoChannelPostsValue = new String[10]; // Array for ESO, Energy Storage Optimizer ) Posts @@ -704,7 +693,7 @@ void processIncomingJsonMessageEso(String topic, String messageJsonEso) { esoChannelsUpdateValues = esoChannelPostsValue; } - @SuppressWarnings("null") + // @SuppressWarnings("null") // Prepare actual Json-topic Esm-message and update values for channels void processIncomingJsonMessageEsm(String topic, String messageJsonEsm) { String[] esmChannelPostsValue = new String[7]; // Array for ESM, Energy Storage Module ) Posts @@ -760,15 +749,6 @@ void processIncomingJsonMessageEsm(String topic, String messageJsonEsm) { return ehubChannelsUpdateValues; } - public @Nullable static String[] getSsoS0ChannelUpdateValues() { - try { - return ssoS0ChannelsUpdateValues; - } catch (Exception e) { - logger.debug("Failed at update of SsoS0 channel values"); - } - return ssoS0ChannelsUpdateValues; - } - public @Nullable static String[] getSsoS1ChannelUpdateValues() { try { return ssoS1ChannelsUpdateValues; @@ -796,6 +776,15 @@ void processIncomingJsonMessageEsm(String topic, String messageJsonEsm) { return ssoS3ChannelsUpdateValues; } + public @Nullable static String[] getSsoS4ChannelUpdateValues() { + try { + return ssoS4ChannelsUpdateValues; + } catch (Exception e) { + logger.debug("Failed at update of SsoS4 channel values"); + } + return ssoS4ChannelsUpdateValues; + } + public @Nullable static String[] getEsoChannelUpdateValues() { try { return esoChannelsUpdateValues; diff --git a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/SsoJsonElements.java b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/SsoJsonElements.java index b6af865f37919..4c0365bf0a5aa 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/SsoJsonElements.java +++ b/bundles/org.openhab.binding.ferroamp/src/main/java/org/openhab/binding/ferroamp/internal/SsoJsonElements.java @@ -18,7 +18,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; /** - * The {@link EhubParameters} is responsible for all parameters regarded to EHUB + * The {@link EhubParameters1} is responsible for all parameters regarded to EHUB * * @author Örjan Backsell - Initial contribution * diff --git a/bundles/org.openhab.binding.ferroamp/src/main/resources/OH-INF/i18n/ferroamp.properties b/bundles/org.openhab.binding.ferroamp/src/main/resources/OH-INF/i18n/ferroamp.properties index 2044acd4bcc4f..c3d276e687f34 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/resources/OH-INF/i18n/ferroamp.properties +++ b/bundles/org.openhab.binding.ferroamp/src/main/resources/OH-INF/i18n/ferroamp.properties @@ -5,7 +5,7 @@ addon.ferroamp.description = This is the binding for Ferroamp EnergyHub. # thing types -thing-type.ferroamp.energyhub.label = Ferroamp Binding Thing +thing-type.ferroamp.energyhub.label = EnergyHub thing-type.ferroamp.energyhub.description = Provides information from Ferroamp EnergyHub thing-type.ferroamp.energyhub.channel.ace-current-l1.label = ACE Current L1 thing-type.ferroamp.energyhub.channel.ace-current-l2.label = ACE Current L2 @@ -28,59 +28,59 @@ thing-type.ferroamp.energyhub.channel.esm-timestamp.label = Esm Time Stamp When thing-type.ferroamp.energyhub.channel.esm-total-capacity.label = Esm Rated Capacity thing-type.ferroamp.energyhub.channel.eso-battery-energy-consumed.label = Eso Battery Energy Consumed thing-type.ferroamp.energyhub.channel.eso-battery-energy-produced.label = Eso Battery Energy Produced -thing-type.ferroamp.energyhub.channel.eso-current-battery.label = Eso Current Measured on Battery Side +thing-type.ferroamp.energyhub.channel.eso-current-battery.label = Eso Current on Battery Side thing-type.ferroamp.energyhub.channel.eso-dc-link-voltage.label = Eso DC Link Voltage thing-type.ferroamp.energyhub.channel.eso-fault-code.label = Eso FaultCode thing-type.ferroamp.energyhub.channel.eso-id.label = Eso Unique Identifier thing-type.ferroamp.energyhub.channel.eso-relay-status.label = Eso RelayStatus thing-type.ferroamp.energyhub.channel.eso-soc.label = Eso State of Charge -thing-type.ferroamp.energyhub.channel.eso-temperature.label = ESO Temperature Measured on PCB +thing-type.ferroamp.energyhub.channel.eso-temperature.label = ESO Temperature on PCB thing-type.ferroamp.energyhub.channel.eso-timestamp.label = Eso Time Stamp When Message was Published -thing-type.ferroamp.energyhub.channel.eso-voltage-battery.label = Eso Voltage Measured on Battery Side -thing-type.ferroamp.energyhub.channel.external-voltage-l1.label = External Voltage L1 -thing-type.ferroamp.energyhub.channel.external-voltage-l2.label = External Voltage L2 -thing-type.ferroamp.energyhub.channel.external-voltage-l3.label = External Voltage L3 -thing-type.ferroamp.energyhub.channel.grid-current-active-l1.label = Grid Current Active L1 -thing-type.ferroamp.energyhub.channel.grid-current-active-l2.label = Grid Current Active L2 -thing-type.ferroamp.energyhub.channel.grid-current-active-l3.label = Grid Current Active L3 +thing-type.ferroamp.energyhub.channel.eso-voltage-battery.label = Eso Voltage on Battery Side +thing-type.ferroamp.energyhub.channel.grid-active-current-l1.label = Grid Active Current L1 +thing-type.ferroamp.energyhub.channel.grid-active-current-l2.label = Grid Active Current L2 +thing-type.ferroamp.energyhub.channel.grid-active-current-l3.label = Grid Active Current L3 thing-type.ferroamp.energyhub.channel.grid-current-l1.label = Grid Current L1 thing-type.ferroamp.energyhub.channel.grid-current-l2.label = Grid Current L2 thing-type.ferroamp.energyhub.channel.grid-current-l3.label = Grid Current L3 -thing-type.ferroamp.energyhub.channel.grid-current-reactive-l1.label = Grid Reactive Current L1 -thing-type.ferroamp.energyhub.channel.grid-current-reactive-l2.label = Grid Reactive Current L2 -thing-type.ferroamp.energyhub.channel.grid-current-reactive-l3.label = Grid Reactive Current L3 thing-type.ferroamp.energyhub.channel.grid-energy-consumed-l1.label = Grid Energy Consumed L1 thing-type.ferroamp.energyhub.channel.grid-energy-consumed-l2.label = Grid Energy Consumed L2 thing-type.ferroamp.energyhub.channel.grid-energy-consumed-l3.label = Grid Energy Consumed L3 -thing-type.ferroamp.energyhub.channel.grid-energy-consumed-total.label = Total Consumed Grid Energy +thing-type.ferroamp.energyhub.channel.grid-energy-consumed-total.label = Grid Energy Consumed Total thing-type.ferroamp.energyhub.channel.grid-energy-produced-l1.label = Grid Energy Produced L1 thing-type.ferroamp.energyhub.channel.grid-energy-produced-l2.label = Grid Energy Produced L2 thing-type.ferroamp.energyhub.channel.grid-energy-produced-l3.label = Grid Energy Produced L3 -thing-type.ferroamp.energyhub.channel.grid-energy-produced-total.label = Total Produced Grid Energy -thing-type.ferroamp.energyhub.channel.grid-frequency.label = Estimated Grid Frequency +thing-type.ferroamp.energyhub.channel.grid-energy-produced-total.label = Grid Energy Produced Total +thing-type.ferroamp.energyhub.channel.grid-frequency.label = Grid Frequency thing-type.ferroamp.energyhub.channel.grid-power-active-l1.label = Grid Power Active L1 thing-type.ferroamp.energyhub.channel.grid-power-active-l2.label = Grid Power Active L2 thing-type.ferroamp.energyhub.channel.grid-power-active-l3.label = Grid Power Active L3 thing-type.ferroamp.energyhub.channel.grid-power-reactive-l1.label = Grid Power Reactive L1 thing-type.ferroamp.energyhub.channel.grid-power-reactive-l2.label = Grid Power Reactive L2 thing-type.ferroamp.energyhub.channel.grid-power-reactive-l3.label = Grid Power Reactive L3 -thing-type.ferroamp.energyhub.channel.inverter-current-active-l1.label = Inverter Active Current L1 -thing-type.ferroamp.energyhub.channel.inverter-current-active-l2.label = Inverter Active Current L2 -thing-type.ferroamp.energyhub.channel.inverter-current-active-l3.label = Inverter Active Current L3 -thing-type.ferroamp.energyhub.channel.inverter-current-reactive-l1.label = Inverter Reactive Current L1 -thing-type.ferroamp.energyhub.channel.inverter-current-reactive-l2.label = Inverter Reactive Current L2 -thing-type.ferroamp.energyhub.channel.inverter-current-reactive-l3.label = Inverter Reactive Current L3 +thing-type.ferroamp.energyhub.channel.grid-reactive-current-l1.label = Grid Reactive Current L1 +thing-type.ferroamp.energyhub.channel.grid-reactive-current-l2.label = Grid Reactive Current L2 +thing-type.ferroamp.energyhub.channel.grid-reactive-current-l3.label = Grid Reactive Current L3 +thing-type.ferroamp.energyhub.channel.grid-voltage-l1.label = Grid Voltage L1 +thing-type.ferroamp.energyhub.channel.grid-voltage-l2.label = Grid Voltage L2 +thing-type.ferroamp.energyhub.channel.grid-voltage-l3.label = Grid Voltage L3 +thing-type.ferroamp.energyhub.channel.inverter-active-current-l1.label = Inverter Active Current L1 +thing-type.ferroamp.energyhub.channel.inverter-active-current-l2.label = Inverter Active Current L2 +thing-type.ferroamp.energyhub.channel.inverter-active-current-l3.label = Inverter Active Current L3 thing-type.ferroamp.energyhub.channel.inverter-energy-consumed-l1.label = Inverter Energy Consumed L1 thing-type.ferroamp.energyhub.channel.inverter-energy-consumed-l2.label = Inverter Energy Consumed L2 thing-type.ferroamp.energyhub.channel.inverter-energy-consumed-l3.label = Inverter Energy Consumed L3 -thing-type.ferroamp.energyhub.channel.inverter-energy-consumed-total.label = Total Consumed Inverter Energy +thing-type.ferroamp.energyhub.channel.inverter-energy-consumed-total.label = Inverter Energy Consumed Total thing-type.ferroamp.energyhub.channel.inverter-energy-produced-l1.label = Inverter Energy Produced L1 thing-type.ferroamp.energyhub.channel.inverter-energy-produced-l2.label = Inverter Energy Produced L2 thing-type.ferroamp.energyhub.channel.inverter-energy-produced-l3.label = Inverter Energy Produced L3 -thing-type.ferroamp.energyhub.channel.inverter-energy-produced-total.label = Total Produced Inverter Energy -thing-type.ferroamp.energyhub.channel.inverter-load-l1.label = Inverter Load L1 -thing-type.ferroamp.energyhub.channel.inverter-load-l2.label = Inverter Load L2 -thing-type.ferroamp.energyhub.channel.inverter-load-l3.label = Inverter Load L3 +thing-type.ferroamp.energyhub.channel.inverter-energy-produced-total.label = Inverter Energy Produced Total +thing-type.ferroamp.energyhub.channel.inverter-load-active-current-l1.label = Inverter Load Active Current L1 +thing-type.ferroamp.energyhub.channel.inverter-load-active-current-l2.label = Inverter Load Active Current L2 +thing-type.ferroamp.energyhub.channel.inverter-load-active-current-l3.label = Inverter Load Active Current L3 +thing-type.ferroamp.energyhub.channel.inverter-load-reactive-current-l1.label = Inverter Load Reactive Current L1 +thing-type.ferroamp.energyhub.channel.inverter-load-reactive-current-l2.label = Inverter Load Reactive Current L2 +thing-type.ferroamp.energyhub.channel.inverter-load-reactive-current-l3.label = Inverter Load Reactive Current L3 thing-type.ferroamp.energyhub.channel.inverter-power-active-l1.label = Inverter Power Active L1 thing-type.ferroamp.energyhub.channel.inverter-power-active-l2.label = Inverter Power Active L2 thing-type.ferroamp.energyhub.channel.inverter-power-active-l3.label = Inverter Power Active L3 @@ -96,54 +96,53 @@ thing-type.ferroamp.energyhub.channel.inverter-rms-current-l3.label = Inverter R thing-type.ferroamp.energyhub.channel.load-energy-consumed-l1.label = Load Energy Consumed L1 thing-type.ferroamp.energyhub.channel.load-energy-consumed-l2.label = Load Energy Consumed L2 thing-type.ferroamp.energyhub.channel.load-energy-consumed-l3.label = Load Energy Consumed L3 -thing-type.ferroamp.energyhub.channel.load-energy-consumed-total.label = Total Consumed Load Energy +thing-type.ferroamp.energyhub.channel.load-energy-consumed-total.label = Load Energy Consumed Total thing-type.ferroamp.energyhub.channel.load-energy-produced-l1.label = Load Energy Produced L1 thing-type.ferroamp.energyhub.channel.load-energy-produced-l2.label = Load Energy Produced L2 thing-type.ferroamp.energyhub.channel.load-energy-produced-l3.label = Load Energy Produced L3 -thing-type.ferroamp.energyhub.channel.load-energy-produced-total.label = Total Produced Load Energy +thing-type.ferroamp.energyhub.channel.load-energy-produced-total.label = Load Energy Produced Total thing-type.ferroamp.energyhub.channel.negative-dc-link-voltage.label = Negative DC Link Voltage thing-type.ferroamp.energyhub.channel.positive-dc-link-voltage.label = Positive DC Link Voltage thing-type.ferroamp.energyhub.channel.power-battery.label = Battery Power thing-type.ferroamp.energyhub.channel.request-auto.label = RequestAuto thing-type.ferroamp.energyhub.channel.request-charge.label = RequestCharge thing-type.ferroamp.energyhub.channel.request-discharge.label = RequestDischarge -thing-type.ferroamp.energyhub.channel.request-extapi-version.label = RequestExtapiVersion -thing-type.ferroamp.energyhub.channel.s0-dc-link-voltage.label = S0 DC Link Voltage -thing-type.ferroamp.energyhub.channel.s0-fault-code.label = S0 FaultCode -thing-type.ferroamp.energyhub.channel.s0-id.label = S0 ID -thing-type.ferroamp.energyhub.channel.s0-pv-current.label = S0 Measured Current on PV String Side -thing-type.ferroamp.energyhub.channel.s0-pv-voltage.label = S0 Measured Voltage on PV String Side -thing-type.ferroamp.energyhub.channel.s0-relay-status.label = S0 RelayStatus -thing-type.ferroamp.energyhub.channel.s0-temperature.label = S0 Temperature Measured on PCB -thing-type.ferroamp.energyhub.channel.s0-timestamp.label = S0 Time Stamp When Message was Published -thing-type.ferroamp.energyhub.channel.s0-total-solar-energy.label = S0 Total Solar Energy thing-type.ferroamp.energyhub.channel.s1-dc-link-voltage.label = S1 DC Link Voltage thing-type.ferroamp.energyhub.channel.s1-fault-code.label = S1 FaultCode thing-type.ferroamp.energyhub.channel.s1-id.label = S1 ID -thing-type.ferroamp.energyhub.channel.s1-pv-current.label = S1 Measured Current on PV String Side -thing-type.ferroamp.energyhub.channel.s1-pv-voltage.label = S1 Measured Voltage on PV String Side +thing-type.ferroamp.energyhub.channel.s1-pv-current.label = S1 Current on PV String Side +thing-type.ferroamp.energyhub.channel.s1-pv-voltage.label = S1 Voltage on PV String Side thing-type.ferroamp.energyhub.channel.s1-relay-status.label = S1 RelayStatus -thing-type.ferroamp.energyhub.channel.s1-temperature.label = S1 Temperature Measured on PCB +thing-type.ferroamp.energyhub.channel.s1-temperature.label = S1 Temperature on PCB thing-type.ferroamp.energyhub.channel.s1-timestamp.label = S1 Time Stamp When Message was Published thing-type.ferroamp.energyhub.channel.s1-total-solar-energy.label = S1 Total Solar Energy thing-type.ferroamp.energyhub.channel.s2-dc-link-voltage.label = S2 DC Link Voltage thing-type.ferroamp.energyhub.channel.s2-fault-code.label = S2 FaultCode thing-type.ferroamp.energyhub.channel.s2-id.label = S2 ID -thing-type.ferroamp.energyhub.channel.s2-pv-current.label = S2 Measured Current on PV String Side -thing-type.ferroamp.energyhub.channel.s2-pv-voltage.label = S2 Measured Voltage on PV String Side +thing-type.ferroamp.energyhub.channel.s2-pv-current.label = S2 Current on PV String Side +thing-type.ferroamp.energyhub.channel.s2-pv-voltage.label = S2 Voltage on PV String Side thing-type.ferroamp.energyhub.channel.s2-relay-status.label = S2 RelayStatus -thing-type.ferroamp.energyhub.channel.s2-temperature.label = S2 Temperature Measured on PCB +thing-type.ferroamp.energyhub.channel.s2-temperature.label = S2 Temperature on PCB thing-type.ferroamp.energyhub.channel.s2-timestamp.label = S2 Time Stamp When Message was Published thing-type.ferroamp.energyhub.channel.s2-total-solar-energy.label = S2 Total Solar Energy thing-type.ferroamp.energyhub.channel.s3-dc-link-voltage.label = S3 DC Link Voltage thing-type.ferroamp.energyhub.channel.s3-fault-code.label = S3 FaultCode thing-type.ferroamp.energyhub.channel.s3-id.label = S3 ID -thing-type.ferroamp.energyhub.channel.s3-pv-current.label = S3 Measured Current on PV String Side -thing-type.ferroamp.energyhub.channel.s3-pv-voltage.label = S3 Measured Voltage on PV String Side +thing-type.ferroamp.energyhub.channel.s3-pv-current.label = S3 Current on PV String Side +thing-type.ferroamp.energyhub.channel.s3-pv-voltage.label = S3 Voltage on PV String Side thing-type.ferroamp.energyhub.channel.s3-relay-status.label = S3 RelayStatus -thing-type.ferroamp.energyhub.channel.s3-temperature.label = S3 Temperature Measured on PCB +thing-type.ferroamp.energyhub.channel.s3-temperature.label = S3 Temperature on PCB thing-type.ferroamp.energyhub.channel.s3-timestamp.label = S3 Time Stamp When Message was Published thing-type.ferroamp.energyhub.channel.s3-total-solar-energy.label = S3 Total Solar Energy +thing-type.ferroamp.energyhub.channel.s4-dc-link-voltage.label = S4 DC Link Voltage +thing-type.ferroamp.energyhub.channel.s4-fault-code.label = S4 FaultCode +thing-type.ferroamp.energyhub.channel.s4-id.label = S4 ID +thing-type.ferroamp.energyhub.channel.s4-pv-current.label = S4 Current on PV String Side +thing-type.ferroamp.energyhub.channel.s4-pv-voltage.label = S4 Voltage on PV String Side +thing-type.ferroamp.energyhub.channel.s4-relay-status.label = S4 RelayStatus +thing-type.ferroamp.energyhub.channel.s4-temperature.label = S4 Temperature on PCB +thing-type.ferroamp.energyhub.channel.s4-timestamp.label = S4 Time Stamp When Message was Published +thing-type.ferroamp.energyhub.channel.s4-total-solar-energy.label = S4 Total Solar Energy thing-type.ferroamp.energyhub.channel.soc.label = System State of Charge thing-type.ferroamp.energyhub.channel.soh.label = System State of Health thing-type.ferroamp.energyhub.channel.solar-pv.label = Solar Power @@ -155,37 +154,28 @@ thing-type.ferroamp.energyhub.channel.total-solar-energy.label = Total Solar Ene # thing types config thing-type.config.ferroamp.energyhub.esm.label = ESM Module Available -thing-type.config.ferroamp.energyhub.esm.description = ESM Module Available +thing-type.config.ferroamp.energyhub.esm.description = Has the system an Esm unit connected? thing-type.config.ferroamp.energyhub.eso.label = ESO Module Available -thing-type.config.ferroamp.energyhub.eso.description = ESO Module Available -thing-type.config.ferroamp.energyhub.hasBattery.label = Battery Capable -thing-type.config.ferroamp.energyhub.hasBattery.description = Ehub type, with/without battery +thing-type.config.ferroamp.energyhub.eso.description = Has the system an Eso unit connected? +thing-type.config.ferroamp.energyhub.hasBattery.label = Battery Available +thing-type.config.ferroamp.energyhub.hasBattery.description = Has the system a battery connected? thing-type.config.ferroamp.energyhub.hostName.label = Hostname thing-type.config.ferroamp.energyhub.hostName.description = Hostname or IP address of the device thing-type.config.ferroamp.energyhub.password.label = Password thing-type.config.ferroamp.energyhub.password.description = Password to access the device -thing-type.config.ferroamp.energyhub.ssoS0.label = SSO String S0 Available -thing-type.config.ferroamp.energyhub.ssoS0.description = First SSO Unit Available -thing-type.config.ferroamp.energyhub.ssoS1.label = SSO String S1 Available -thing-type.config.ferroamp.energyhub.ssoS1.description = Second SSO Unit Available -thing-type.config.ferroamp.energyhub.ssoS2.label = SSO String S2 Available -thing-type.config.ferroamp.energyhub.ssoS2.description = Third SSO Unit Available -thing-type.config.ferroamp.energyhub.ssoS3.label = SSO String S3 Available -thing-type.config.ferroamp.energyhub.ssoS3.description = Fourth SSO Unit Available thing-type.config.ferroamp.energyhub.userName.label = Username thing-type.config.ferroamp.energyhub.userName.description = Username to access the device # channel types channel-type.ferroamp.date-time.label = Date Time -channel-type.ferroamp.dimensionless.label = Dimensionless +channel-type.ferroamp.date-time.state.pattern = %1$tc channel-type.ferroamp.electric-current.label = Electric Current channel-type.ferroamp.electric-potential.label = Electrical Potential channel-type.ferroamp.energy.label = Energy channel-type.ferroamp.frequency.label = Frequency +channel-type.ferroamp.percentage.label = Percentage channel-type.ferroamp.power.label = Power -channel-type.ferroamp.request-extapiversion.label = Request-ExtapiVersion -channel-type.ferroamp.request-extapiversion.description = Returns Extapi Version channel-type.ferroamp.request.label = String channel-type.ferroamp.request.description = Used for control of system channel-type.ferroamp.string.label = String @@ -193,6 +183,48 @@ channel-type.ferroamp.temperature.label = Temperature # thing types +thing-type.ferroamp.energyhub.channel.grid-current-active-l1.label = Grid Current Active L1 +thing-type.ferroamp.energyhub.channel.grid-current-active-l2.label = Grid Current Active L2 +thing-type.ferroamp.energyhub.channel.grid-current-active-l3.label = Grid Current Active L3 +thing-type.ferroamp.energyhub.channel.grid-current-reactive-l1.label = Grid Reactive Current L1 +thing-type.ferroamp.energyhub.channel.grid-current-reactive-l2.label = Grid Reactive Current L2 +thing-type.ferroamp.energyhub.channel.grid-current-reactive-l3.label = Grid Reactive Current L3 +thing-type.ferroamp.energyhub.channel.inverter-current-active-l1.label = Inverter Active Current L1 +thing-type.ferroamp.energyhub.channel.inverter-current-active-l2.label = Inverter Active Current L2 +thing-type.ferroamp.energyhub.channel.inverter-current-active-l3.label = Inverter Active Current L3 +thing-type.ferroamp.energyhub.channel.inverter-current-reactive-l1.label = Inverter Reactive Current L1 +thing-type.ferroamp.energyhub.channel.inverter-current-reactive-l2.label = Inverter Reactive Current L2 +thing-type.ferroamp.energyhub.channel.inverter-current-reactive-l3.label = Inverter Reactive Current L3 +thing-type.ferroamp.energyhub.channel.inverter-load-l1.label = Inverter Load L1 +thing-type.ferroamp.energyhub.channel.inverter-load-l2.label = Inverter Load L2 +thing-type.ferroamp.energyhub.channel.inverter-load-l3.label = Inverter Load L3 +thing-type.ferroamp.energyhub.channel.s0-dc-link-voltage.label = S0 DC Link Voltage +thing-type.ferroamp.energyhub.channel.s0-fault-code.label = S0 FaultCode +thing-type.ferroamp.energyhub.channel.s0-id.label = S0 ID +thing-type.ferroamp.energyhub.channel.s0-pv-current.label = S0 Measured Current on PV String Side +thing-type.ferroamp.energyhub.channel.s0-pv-voltage.label = S0 Measured Voltage on PV String Side +thing-type.ferroamp.energyhub.channel.s0-relay-status.label = S0 RelayStatus +thing-type.ferroamp.energyhub.channel.s0-temperature.label = S0 Temperature Measured on PCB +thing-type.ferroamp.energyhub.channel.s0-timestamp.label = S0 Time Stamp When Message was Published +thing-type.ferroamp.energyhub.channel.s0-total-solar-energy.label = S0 Total Solar Energy + +# thing types config + +thing-type.config.ferroamp.energyhub.ssoS0.label = SSO String S0 Available +thing-type.config.ferroamp.energyhub.ssoS0.description = First SSO Unit Available +thing-type.config.ferroamp.energyhub.ssoS1.label = SSO String S1 Available +thing-type.config.ferroamp.energyhub.ssoS1.description = Second SSO Unit Available +thing-type.config.ferroamp.energyhub.ssoS2.label = SSO String S2 Available +thing-type.config.ferroamp.energyhub.ssoS2.description = Third SSO Unit Available +thing-type.config.ferroamp.energyhub.ssoS3.label = SSO String S3 Available +thing-type.config.ferroamp.energyhub.ssoS3.description = Fourth SSO Unit Available + +# channel types + +channel-type.ferroamp.dimensionless.label = Dimensionless + +# thing types + thing-type.ferroamp.energyhub.channel.esm-rated-power-battery.label = Esm Rated Power of Battery thing-type.ferroamp.energyhub.channel.esm-total-rated-capacity-all-batteries.label = Esm Rated Capacity thing-type.ferroamp.energyhub.channel.esm-unique-identifier.label = Esm Unique Identifier diff --git a/bundles/org.openhab.binding.ferroamp/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.ferroamp/src/main/resources/OH-INF/thing/thing-types.xml index fd0729ce90af8..4524250bed09a 100644 --- a/bundles/org.openhab.binding.ferroamp/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.ferroamp/src/main/resources/OH-INF/thing/thing-types.xml @@ -5,12 +5,12 @@ xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd"> - + Provides information from Ferroamp EnergyHub - + @@ -21,14 +21,14 @@ - - + + - - + + - - + + @@ -39,22 +39,22 @@ - + - + - + - + - + - + @@ -66,41 +66,41 @@ - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -223,22 +223,22 @@ - + - + - + - + - + - + @@ -255,10 +255,10 @@ - + - + @@ -267,41 +267,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -310,7 +283,7 @@ - + @@ -325,10 +298,10 @@ - + - + @@ -337,7 +310,7 @@ - + @@ -352,10 +325,10 @@ - + - + @@ -364,7 +337,7 @@ - + @@ -375,14 +348,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -390,14 +390,14 @@ - + - + @@ -411,10 +411,10 @@ - + - + @@ -438,9 +438,6 @@ - - - @@ -460,33 +457,19 @@ Password to access the device - - Ehub type, with/without battery + + Has the system a battery connected? false - - - First SSO Unit Available - - - - Second SSO Unit Available - - - - Third SSO Unit Available - - - - Fourth SSO Unit Available - - ESO Module Available + Has the system an Eso unit connected? + false - ESM Module Available + Has the system an Esm unit connected? + false @@ -516,7 +499,7 @@ DateTime Energy - + @@ -533,9 +516,9 @@ - - Number:Dimensionless - + + Number:Dimensionless + Energy @@ -562,12 +545,4 @@ - - String - - Returns Extapi Version - Energy - - -