]> git.basschouten.com Git - openhab-addons.git/commitdiff
[fronius] Add additional Inverter DC channels (#12867)
authorjimtng <2554958+jimtng@users.noreply.github.com>
Tue, 7 Jun 2022 06:11:06 +0000 (16:11 +1000)
committerGitHub <noreply@github.com>
Tue, 7 Jun 2022 06:11:06 +0000 (08:11 +0200)
* [fronius] Add additional Inverter DC channels
* [fronius] Update channel description and translations
* [fronius] Add calculated DC Power channels

Signed-off-by: Jimmy Tanagra <jcode@tanagra.id.au>
bundles/org.openhab.binding.fronius/README.md
bundles/org.openhab.binding.fronius/src/main/java/org/openhab/binding/fronius/internal/FroniusBindingConstants.java
bundles/org.openhab.binding.fronius/src/main/java/org/openhab/binding/fronius/internal/api/InverterRealtimeBodyData.java
bundles/org.openhab.binding.fronius/src/main/java/org/openhab/binding/fronius/internal/handler/FroniusSymoInverterHandler.java
bundles/org.openhab.binding.fronius/src/main/resources/OH-INF/i18n/fronius.properties
bundles/org.openhab.binding.fronius/src/main/resources/OH-INF/thing/thing-types.xml

index ebe794dde1332b97f143e25e7e254fff11f989b0..ceb90a71a1d4df0263079c038e2a9899a94f90bf 100644 (file)
@@ -59,12 +59,19 @@ The binding has no configuration options, all configuration is done at `bridge`,
 
 | Channel ID                           | Item Type                | Description                                                                                                       |
 | ------------------------------------ | ------------------------ | ----------------------------------------------------------------------------------------------------------------- |
-| `inverterdatachannelpac`             | Number:Power             | Power generated                                                                                                   |
+| `inverterdatachannelpac`             | Number:Power             | AC Power generated                                                                                                |
+| `inverterdatachannelpdc`             | Number:Power             | DC Power calculated from DC voltage * DC current                                                                  |
+| `inverterdatachannelpdc2`            | Number:Power             | DC Power 2 calculated from DC voltage 2 * DC current 2                                                            |
+| `inverterdatachannelpdc3`            | Number:Power             | DC Power 3 calculated from DC voltage 3 * DC current 3                                                            |
 | `inverterdatachannelfac`             | Number:Frequency         | AC frequency                                                                                                      |
 | `inverterdatachanneliac`             | Number:ElectricCurrent   | AC current                                                                                                        |
 | `inverterdatachannelidc`             | Number:ElectricCurrent   | DC current                                                                                                        |
+| `inverterdatachannelidc2`            | Number:ElectricCurrent   | DC current 2                                                                                                      |
+| `inverterdatachannelidc3`            | Number:ElectricCurrent   | DC current 3                                                                                                      |
 | `inverterdatachanneluac`             | Number:ElectricPotential | AC voltage                                                                                                        |
 | `inverterdatachanneludc`             | Number:ElectricPotential | DC voltage                                                                                                        |
+| `inverterdatachanneludc2`            | Number:ElectricPotential | DC voltage 2                                                                                                      |
+| `inverterdatachanneludc3`            | Number:ElectricPotential | DC voltage 3                                                                                                      |
 | `inverterdatachanneldayenergy`       | Number:Energy            | Energy generated on current day                                                                                   |
 | `inverterdatachannelyear`            | Number:Energy            | Energy generated in current year                                                                                  |
 | `inverterdatachanneltotal`           | Number:Energy            | Energy generated overall                                                                                          |
@@ -73,7 +80,7 @@ The binding has no configuration options, all configuration is done at `bridge`,
 | `powerflowchannelpgrid`              | Number:Power             | Grid Power (+ from grid, - to grid)                                                                               |
 | `powerflowchannelpload`              | Number:Power             | Load Power (+ generator, - consumer)                                                                              |
 | `powerflowchannelpakku`              | Number:Power             | Battery Power (+ charge, - discharge)                                                                             |
-| `powerflowchannelppv`                | Number:Power             | Solar Power (+ production)                                                                                              |
+| `powerflowchannelppv`                | Number:Power             | Solar Power (+ production)                                                                                        |
 | `powerflowautonomy`                  | Number:Dimensionless     | The current relative autonomy in %                                                                                |
 | `powerflowselfconsumption`           | Number:Dimensionless     | The current relative self consumption in %                                                                        |
 | `powerflowinverter1power`            | Number:Power             | Current power of inverter 1, null if not running (+ produce/export, - consume/import)                             |
index 02e260d884583bfc1d771aeee437ee533568582d..4e334a6754ad22c5164a40497d9be18847a987bc 100644 (file)
@@ -44,8 +44,15 @@ public class FroniusBindingConstants {
     public static final String INVERTER_DATA_CHANNEL_FAC = "inverterdatachannelfac";
     public static final String INVERTER_DATA_CHANNEL_IAC = "inverterdatachanneliac";
     public static final String INVERTER_DATA_CHANNEL_IDC = "inverterdatachannelidc";
+    public static final String INVERTER_DATA_CHANNEL_IDC2 = "inverterdatachannelidc2";
+    public static final String INVERTER_DATA_CHANNEL_IDC3 = "inverterdatachannelidc3";
     public static final String INVERTER_DATA_CHANNEL_UAC = "inverterdatachanneluac";
     public static final String INVERTER_DATA_CHANNEL_UDC = "inverterdatachanneludc";
+    public static final String INVERTER_DATA_CHANNEL_UDC2 = "inverterdatachanneludc2";
+    public static final String INVERTER_DATA_CHANNEL_UDC3 = "inverterdatachanneludc3";
+    public static final String INVERTER_DATA_CHANNEL_PDC = "inverterdatachannelpdc";
+    public static final String INVERTER_DATA_CHANNEL_PDC2 = "inverterdatachannelpdc2";
+    public static final String INVERTER_DATA_CHANNEL_PDC3 = "inverterdatachannelpdc3";
     public static final String INVERTER_DATA_CHANNEL_DEVICE_STATUS_ERROR_CODE = "inverterdatadevicestatuserrorcode";
     public static final String INVERTER_DATA_CHANNEL_DEVICE_STATUS_STATUS_CODE = "inverterdatadevicestatusstatuscode";
 
index 78c0397d03cc9b04e1fff3546a73f83da8f21c74..7407e80964c04acfe934a1a54744a13f6d8801e6 100644 (file)
@@ -30,6 +30,10 @@ public class InverterRealtimeBodyData {
     private ValueUnit iac;
     @SerializedName("IDC")
     private ValueUnit idc;
+    @SerializedName("IDC_2")
+    private ValueUnit idc2;
+    @SerializedName("IDC_3")
+    private ValueUnit idc3;
     @SerializedName("PAC")
     private ValueUnit pac;
     @SerializedName("TOTAL_ENERGY")
@@ -38,6 +42,10 @@ public class InverterRealtimeBodyData {
     private ValueUnit uac;
     @SerializedName("UDC")
     private ValueUnit udc;
+    @SerializedName("UDC_2")
+    private ValueUnit udc2;
+    @SerializedName("UDC_3")
+    private ValueUnit udc3;
     @SerializedName("YEAR_ENERGY")
     private ValueUnit yearEnergy;
     @SerializedName("DeviceStatus")
@@ -110,6 +118,14 @@ public class InverterRealtimeBodyData {
         this.idc = idc;
     }
 
+    public ValueUnit getIdc2() {
+        return idc2;
+    }
+
+    public ValueUnit getIdc3() {
+        return idc3;
+    }
+
     public ValueUnit getUac() {
         return uac;
     }
@@ -125,4 +141,12 @@ public class InverterRealtimeBodyData {
     public void setUdc(ValueUnit udc) {
         this.udc = udc;
     }
+
+    public ValueUnit getUdc2() {
+        return udc2;
+    }
+
+    public ValueUnit getUdc3() {
+        return udc3;
+    }
 }
index 1cada21e3cbf4218dc46cbb209d95f6dc3465dd2..1b8b328aba48bf34ca3f22760624bac01550f2dd 100644 (file)
@@ -96,10 +96,24 @@ public class FroniusSymoInverterHandler extends FroniusBaseThingHandler {
                     return getQuantityOrZero(inverterData.getIac(), Units.AMPERE);
                 case FroniusBindingConstants.INVERTER_DATA_CHANNEL_IDC:
                     return getQuantityOrZero(inverterData.getIdc(), Units.AMPERE);
+                case FroniusBindingConstants.INVERTER_DATA_CHANNEL_IDC2:
+                    return getQuantityOrZero(inverterData.getIdc2(), Units.AMPERE);
+                case FroniusBindingConstants.INVERTER_DATA_CHANNEL_IDC3:
+                    return getQuantityOrZero(inverterData.getIdc3(), Units.AMPERE);
                 case FroniusBindingConstants.INVERTER_DATA_CHANNEL_UAC:
                     return getQuantityOrZero(inverterData.getUac(), Units.VOLT);
                 case FroniusBindingConstants.INVERTER_DATA_CHANNEL_UDC:
                     return getQuantityOrZero(inverterData.getUdc(), Units.VOLT);
+                case FroniusBindingConstants.INVERTER_DATA_CHANNEL_UDC2:
+                    return getQuantityOrZero(inverterData.getUdc2(), Units.VOLT);
+                case FroniusBindingConstants.INVERTER_DATA_CHANNEL_UDC3:
+                    return getQuantityOrZero(inverterData.getUdc3(), Units.VOLT);
+                case FroniusBindingConstants.INVERTER_DATA_CHANNEL_PDC:
+                    return calculatePower(inverterData.getUdc(), inverterData.getIdc());
+                case FroniusBindingConstants.INVERTER_DATA_CHANNEL_PDC2:
+                    return calculatePower(inverterData.getUdc2(), inverterData.getIdc2());
+                case FroniusBindingConstants.INVERTER_DATA_CHANNEL_PDC3:
+                    return calculatePower(inverterData.getUdc3(), inverterData.getIdc3());
                 case FroniusBindingConstants.INVERTER_DATA_CHANNEL_DAY_ENERGY:
                     // Convert the unit to kWh for backwards compatibility with non-quantity type
                     return getQuantityOrZero(inverterData.getDayEnergy(), Units.KILOWATT_HOUR).toUnit("kWh");
@@ -199,4 +213,17 @@ public class FroniusSymoInverterHandler extends FroniusBaseThingHandler {
         String location = FroniusBindingConstants.getInverterDataUrl(ip, deviceId);
         return collectDataFromUrl(InverterRealtimeResponse.class, location);
     }
+
+    /**
+     * Calculate the power value from the given voltage and current channels
+     * 
+     * @param voltage the voltage ValueUnit
+     * @param current the current ValueUnit
+     * @return {QuantityType<>} the power value calculated by multiplying voltage and current
+     */
+    private QuantityType<?> calculatePower(ValueUnit voltage, ValueUnit current) {
+        QuantityType<?> qtyVoltage = getQuantityOrZero(voltage, Units.VOLT);
+        QuantityType<?> qtyCurrent = getQuantityOrZero(current, Units.AMPERE);
+        return qtyVoltage.multiply(qtyCurrent).toUnit(Units.WATT);
+    }
 }
index c510a15324dc439e7869adada5b11541a339d259..efa2d1deccf1c4e54dbafdbb5014208f4bf60854 100644 (file)
@@ -61,6 +61,10 @@ channel-type.fronius.iac.label = AC Current
 channel-type.fronius.iac.description = AC current
 channel-type.fronius.idc.label = DC Current
 channel-type.fronius.idc.description = DC current
+channel-type.fronius.idc2.label = DC Current 2
+channel-type.fronius.idc2.description = DC current 2
+channel-type.fronius.idc3.label = DC Current 3
+channel-type.fronius.idc3.description = DC current 3
 channel-type.fronius.inverter1Power.label = Inverter 1 Power
 channel-type.fronius.inverter1Power.description = Inverter 1 Power
 channel-type.fronius.inverter1Soc.label = Inverter 1 State of Charge
@@ -90,6 +94,12 @@ channel-type.fronius.pPv.label = Solar Plant Power
 channel-type.fronius.pPv.description = Current Solar Plant Power
 channel-type.fronius.pac.label = AC Power
 channel-type.fronius.pac.description = AC power
+channel-type.fronius.pdc.label = DC Power
+channel-type.fronius.pdc.description = DC power
+channel-type.fronius.pdc2.label = DC Power 2
+channel-type.fronius.pdc2.description = DC power 2
+channel-type.fronius.pdc3.label = DC Power 3
+channel-type.fronius.pdc3.description = DC power 3
 channel-type.fronius.powerflow_rel_autonomy.label = Autonomy
 channel-type.fronius.powerflow_rel_autonomy.description = The current relative autonomy in %, NULL if no smart meter is connected
 channel-type.fronius.powerflow_rel_selfconsumption.label = Self Consumption
@@ -100,5 +110,9 @@ channel-type.fronius.uac.label = AC Voltage
 channel-type.fronius.uac.description = AC voltage
 channel-type.fronius.udc.label = DC Voltage
 channel-type.fronius.udc.description = DC voltage
+channel-type.fronius.udc2.label = DC Voltage 2
+channel-type.fronius.udc2.description = DC voltage 2
+channel-type.fronius.udc3.label = DC Voltage 3
+channel-type.fronius.udc3.description = DC voltage 3
 channel-type.fronius.year_energy.label = Year Energy
 channel-type.fronius.year_energy.description = Energy generated in current year
index 0c6ffa97f462c99bf75745b44321efac3c8ce9c8..4d42e1dea8f1d7160bad74102722e568ed7fb397 100644 (file)
 
                <channels>
                        <channel id="inverterdatachannelpac" typeId="pac"/>
+                       <channel id="inverterdatachannelpdc" typeId="pdc"/>
+                       <channel id="inverterdatachannelpdc2" typeId="pdc2"/>
+                       <channel id="inverterdatachannelpdc3" typeId="pdc3"/>
                        <channel id="inverterdatachanneldayenergy" typeId="day_energy"/>
                        <channel id="inverterdatachanneltotal" typeId="total_energy"/>
                        <channel id="inverterdatachannelyear" typeId="year_energy"/>
                        <channel id="inverterdatachannelfac" typeId="fac"/>
                        <channel id="inverterdatachanneliac" typeId="iac"/>
                        <channel id="inverterdatachannelidc" typeId="idc"/>
+                       <channel id="inverterdatachannelidc2" typeId="idc2"/>
+                       <channel id="inverterdatachannelidc3" typeId="idc3"/>
                        <channel id="inverterdatachanneluac" typeId="uac"/>
                        <channel id="inverterdatachanneludc" typeId="udc"/>
+                       <channel id="inverterdatachanneludc2" typeId="udc2"/>
+                       <channel id="inverterdatachanneludc3" typeId="udc3"/>
                        <channel id="inverterdatadevicestatuserrorcode" typeId="devicestatus_errorcode"/>
                        <channel id="inverterdatadevicestatusstatuscode" typeId="devicestatus_statuscode"/>
                        <channel id="powerflowchannelpgrid" typeId="pGrid">
                <description>AC power</description>
                <state pattern="%f W" readOnly="true"></state>
        </channel-type>
+       <channel-type id="pdc">
+               <item-type>Number:Power</item-type>
+               <label>DC Power</label>
+               <description>DC power</description>
+               <state pattern="%f W" readOnly="true"></state>
+       </channel-type>
+       <channel-type id="pdc2">
+               <item-type>Number:Power</item-type>
+               <label>DC Power 2</label>
+               <description>DC power 2</description>
+               <state pattern="%f W" readOnly="true"></state>
+       </channel-type>
+       <channel-type id="pdc3">
+               <item-type>Number:Power</item-type>
+               <label>DC Power 3</label>
+               <description>DC power 3</description>
+               <state pattern="%f W" readOnly="true"></state>
+       </channel-type>
        <channel-type id="total_energy">
                <item-type>Number:Energy</item-type>
                <label>Total Energy</label>
                <description>DC current</description>
                <state pattern="%.2f A" readOnly="true"></state>
        </channel-type>
+       <channel-type id="idc2">
+               <item-type>Number:ElectricCurrent</item-type>
+               <label>DC Current 2</label>
+               <description>DC current 2</description>
+               <state pattern="%.2f A" readOnly="true"></state>
+       </channel-type>
+       <channel-type id="idc3">
+               <item-type>Number:ElectricCurrent</item-type>
+               <label>DC Current 3</label>
+               <description>DC current 3</description>
+               <state pattern="%.2f A" readOnly="true"></state>
+       </channel-type>
        <channel-type id="uac">
                <item-type>Number:ElectricPotential</item-type>
                <label>AC Voltage</label>
                <description>DC voltage</description>
                <state pattern="%.1f V" readOnly="true"></state>
        </channel-type>
+       <channel-type id="udc2">
+               <item-type>Number:ElectricPotential</item-type>
+               <label>DC Voltage 2</label>
+               <description>DC voltage 2</description>
+               <state pattern="%.1f V" readOnly="true"></state>
+       </channel-type>
+       <channel-type id="udc3">
+               <item-type>Number:ElectricPotential</item-type>
+               <label>DC Voltage 3</label>
+               <description>DC voltage 3</description>
+               <state pattern="%.1f V" readOnly="true"></state>
+       </channel-type>
 
        <channel-type id="devicestatus_errorcode">
                <item-type>Number</item-type>