* Added support for fronius ohmpilot and added smart meter power sum.
Signed-off-by: urmet0 <hannes.spenger@gmail.com>
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `bridge` | The Bridge |
| `powerinverter` | Fronius Galvo, Symo and other Fronius inverters in combination with the Fronius Datamanager 1.0 / 2.0 or Fronius Datalogger. You can add multiple inverters that depend on the same datalogger with different device ids. (Default 1) |
-| `meter` | Fronius Smart Meter. You can add multiple smart meters with different device ids. (The default id = 0) |
+| `meter` | Fronius Smart Meter. You can add multiple smart meters with different device ids. (The default id = 0)
+| `ohmpilot` | Fronius Ohmpilot. (The default id = 0)
+
## Discovery
## Binding Configuration
-The binding has no configuration options, all configuration is done at `bridge`, `powerinverter` or `meter` level.
+The binding has no configuration options, all configuration is done at `bridge`, `powerinverter`, `meter` or `ohmpilot` level.
## Thing Configuration
| ---------- | ----------------------------------------------- |
| `deviceId` | The identifier of your smart meter (Default: 0) |
+### Ohmpilot Thing Configuration
+
+| Parameter | Description |
+| ---------- | ----------------------------------------------- |
+| `deviceId` | The identifier of your ohmpilot (Default: 0) |
+
## Channels
### Channels for `powerinverter` Thing
| `powerrealphase1` | Number:Power | Real Power on Phase 1 |
| `powerrealphase2` | Number:Power | Real Power on Phase 2 |
| `powerrealphase3` | Number:Power | Real Power on Phase 3 |
+| `powerrealsum` | Number:Power | Real Power summed up |
| `powerfactorphase1` | Number | Power Factor on Phase 1 |
| `powerfactorphase2` | Number | Power Factor on Phase 2 |
| `powerfactorphase3` | Number | Power Factor on Phase 3 |
| |
+### Channels for `ohmpilot` Thing
+
+| Channel ID | Item Type | Description |
+| ----------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `energyrealsumconsumed` | Number:Energy | Real Energy consumed |
+| `powerrealsum` | Number:Power | Real Power |
+| `temperaturechannel1` | Number:Temperature | Temperature |
+| `errorcode` | Number | Device error code |
+| `statecode` | Number | Device state code<br />`0` up and running <br />`1` keep minimum temperature <br />`2` legionella protection <br />`3` critical fault<br />`4` fault<br />`5` boost mode |
+| |
## Properties
-The `meter` thing has the following properties:
+### The `meter` thing has the following properties:
+
+| Property | Description |
+| -------- | ------------------------------ |
+| `modelId` | The model name of the meter |
+| `serialNumber` | The serial number of the meter |
+
+### The `ohmpilot` thing has the following property:
| Property | Description |
| -------- | ------------------------------ |
-| `model` | The model name of the meter |
-| `serial` | The serial number of the meter |
+| `modelId` | The model name of the ohmpilot |
+| `serialNumber` | The serial number of the ohmpilot |
## Full Example
Bridge fronius:bridge:mybridge [hostname="192.168.66.148", refreshInterval=5] {
Thing powerinverter myinverter [deviceId=1]
Thing meter mymeter [deviceId=0]
+ Thing ohmpilot myohmpilot [deviceId=0]
}
```
Number:Power Meter_PowerPhase1 { channel="fronius:meter:mybridge:mymeter:powerrealphase1" }
Number:Power Meter_PowerPhase2 { channel="fronius:meter:mybridge:mymeter:powerrealphase2" }
Number:Power Meter_PowerPhase3 { channel="fronius:meter:mybridge:mymeter:powerrealphase3" }
+Number:Power Meter_PowerSum { channel="fronius:meter:mybridge:mymeter:powerrealsum" }
Number Meter_PowerFactorPhase1 { channel="fronius:meter:mybridge:mymeter:powerfactorphase1" }
Number Meter_PowerFactorPhase2 { channel="fronius:meter:mybridge:mymeter:powerfactorphase2" }
Number Meter_PowerFactorPhase3 { channel="fronius:meter:mybridge:mymeter:powerfactorphase3" }
Number:Energy Meter_EnergyConsumed { channel="fronius:meter:mybridge:mymeter:energyrealsumconsumed" }
Number:Energy Meter_EnergyProduced { channel="fronius:meter:mybridge:mymeter:energyrealsumproduced" }
+
+Number:Energy Ohmpilot_EnergyConsumed { channel="fronius:ohmpilot:mybridge:myohmpilot:energyrealsumconsumed" }
+Number:Power Ohmpilot_PowerSum { channel="fronius:ohmpilot:mybridge:myohmpilot:powerrealsum" }
+Number:Temperature Ohmpilot_Temperature { channel="fronius:ohmpilot:mybridge:myohmpilot:temperaturechannel1" }
+Number Ohmpilot_State { channel="fronius:ohmpilot:mybridge:myohmpilot:statecode" }
+Number Ohmpilot_Errorcode { channel="fronius:ohmpilot:mybridge:myohmpilot:errorcode" }
+
```
* @author Thomas Rokohl - Initial contribution
* @author Peter Schraffl - Added device status and error status channels
* @author Thomas Kordelle - Added inverter power, battery state of charge and PV solar yield
+ * @author Hannes Spenger - Added ohmpilot & meter power sum
*/
@NonNullByDefault
public class FroniusBindingConstants {
public static final ThingTypeUID THING_TYPE_INVERTER = new ThingTypeUID(BINDING_ID, "powerinverter");
public static final ThingTypeUID THING_TYPE_BRIDGE = new ThingTypeUID(BINDING_ID, "bridge");
public static final ThingTypeUID THING_TYPE_METER = new ThingTypeUID(BINDING_ID, "meter");
+ public static final ThingTypeUID THING_TYPE_OHMPILOT = new ThingTypeUID(BINDING_ID, "ohmpilot");
// List of all Channel ids
public static final String INVERTER_DATA_CHANNEL_DAY_ENERGY = "inverterdatachanneldayenergy";
public static final String POWER_FLOW_P_LOAD = "powerflowchannelpload";
public static final String POWER_FLOW_P_AKKU = "powerflowchannelpakku";
public static final String POWER_FLOW_P_PV = "powerflowchannelppv";
- public static final String METER_MODEL = "model";
- public static final String METER_SERIAL = "serial";
public static final String METER_ENABLE = "enable";
public static final String METER_LOCATION = "location";
public static final String METER_CURRENT_AC_PHASE_1 = "currentacphase1";
public static final String METER_POWER_PHASE_1 = "powerrealphase1";
public static final String METER_POWER_PHASE_2 = "powerrealphase2";
public static final String METER_POWER_PHASE_3 = "powerrealphase3";
+ public static final String METER_POWER_SUM = "powerrealsum";
public static final String METER_POWER_FACTOR_PHASE_1 = "powerfactorphase1";
public static final String METER_POWER_FACTOR_PHASE_2 = "powerfactorphase2";
public static final String METER_POWER_FACTOR_PHASE_3 = "powerfactorphase3";
public static final String METER_ENERGY_REAL_SUM_CONSUMED = "energyrealsumconsumed";
public static final String METER_ENERGY_REAL_SUM_PRODUCED = "energyrealsumproduced";
+ public static final String OHMPILOT_POWER_REAL_SUM = "powerrealsum";
+ public static final String OHMPILOT_ENERGY_REAL_SUM_CONSUMED = "energyrealsumconsumed";
+ public static final String OHMPILOT_ENERGY_SENSOR_TEMPERATURE_CHANNEL_1 = "temperaturechannel1";
+ public static final String OHMPILOT_ERROR_CODE = "errorcode";
+ public static final String OHMPILOT_STATE_CODE = "statecode";
/*
* part of POWERFLOW_REALTIME_DATA using Symo Gen24
public static final String INVERTER_REALTIME_DATA_URL = "http://%IP%/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=%DEVICEID%&DataCollection=CommonInverterData";
public static final String POWERFLOW_REALTIME_DATA = "http://%IP%/solar_api/v1/GetPowerFlowRealtimeData.fcgi";
public static final String METER_REALTIME_DATA_URL = "http://%IP%/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId=%DEVICEID%&DataCollection=MeterRealtimeData";
+ public static final String OHMPILOT_REALTIME_DATA_URL = "http://%IP%/solar_api/v1/GetOhmPilotRealtimeData.cgi?Scope=Device&DeviceId=%DEVICEID%";
}
import org.openhab.binding.fronius.internal.handler.FroniusBridgeHandler;
import org.openhab.binding.fronius.internal.handler.FroniusMeterHandler;
+import org.openhab.binding.fronius.internal.handler.FroniusOhmpilotHandler;
import org.openhab.binding.fronius.internal.handler.FroniusSymoInverterHandler;
import org.openhab.core.thing.Bridge;
import org.openhab.core.thing.Thing;
* handlers.
*
* @author Thomas Rokohl - Initial contribution
+ * @author Hannes Spenger - Added ohmpilot
*/
@Component(service = ThingHandlerFactory.class, configurationPid = "binding.fronius")
public class FroniusHandlerFactory extends BaseThingHandlerFactory {
add(THING_TYPE_INVERTER);
add(THING_TYPE_BRIDGE);
add(THING_TYPE_METER);
+ add(THING_TYPE_OHMPILOT);
}
};
return new FroniusBridgeHandler((Bridge) thing);
} else if (thingTypeUID.equals(THING_TYPE_METER)) {
return new FroniusMeterHandler(thing);
+ } else if (thingTypeUID.equals(THING_TYPE_OHMPILOT)) {
+ return new FroniusOhmpilotHandler(thing);
}
return null;
}
--- /dev/null
+/**
+ * Copyright (c) 2010-2022 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.fronius.internal.api;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * The {@link OhmpilotRealtimeBody} is responsible for storing
+ * the "body" node of the JSON response
+ *
+ * @author Hannes Spenger - Initial contribution
+ */
+public class OhmpilotRealtimeBodyDTO {
+ @SerializedName("Data")
+ private OhmpilotRealtimeBodyDataDTO data;
+
+ public OhmpilotRealtimeBodyDataDTO getData() {
+ if (data == null) {
+ data = new OhmpilotRealtimeBodyDataDTO();
+ }
+ return data;
+ }
+
+ public void setData(OhmpilotRealtimeBodyDataDTO data) {
+ this.data = data;
+ }
+}
--- /dev/null
+/**
+ * Copyright (c) 2010-2022 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.fronius.internal.api;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * The {@link OhmpilotRealtimeBodyData} is responsible for storing
+ * the "data" node of the JSON response
+ *
+ * @author Hannes Spenger - Initial contribution
+ */
+public class OhmpilotRealtimeBodyDataDTO {
+ @SerializedName("Details")
+ private OhmpilotRealtimeDetailsDTO details;
+ @SerializedName("EnergyReal_WAC_Sum_Consumed")
+ private double energyRealWACSumConsumed;
+ @SerializedName("PowerReal_PAC_Sum")
+ private double powerPACSum;
+ @SerializedName("Temperature_Channel_1")
+ private double temperatureChannel1;
+ @SerializedName("CodeOfError")
+ private int errorCode;
+ @SerializedName("CodeOfState")
+ private int stateCode;
+
+ public OhmpilotRealtimeDetailsDTO getDetails() {
+ if (details == null) {
+ details = new OhmpilotRealtimeDetailsDTO();
+ }
+ return details;
+ }
+
+ public void setDetails(OhmpilotRealtimeDetailsDTO details) {
+ this.details = details;
+ }
+
+ public double getEnergyRealWACSumConsumed() {
+ return energyRealWACSumConsumed;
+ }
+
+ public void setEnergyRealWACSumConsumed(double energyRealWACSumConsumed) {
+ this.energyRealWACSumConsumed = energyRealWACSumConsumed;
+ }
+
+ public double getPowerPACSum() {
+ return powerPACSum;
+ }
+
+ public void setPowerPACSum(double powerPACSum) {
+ this.powerPACSum = powerPACSum;
+ }
+
+ public double getTemperatureChannel1() {
+ return temperatureChannel1;
+ }
+
+ public void setTemperatureChannel1(double temperatureChannel1) {
+ this.temperatureChannel1 = temperatureChannel1;
+ }
+
+ public int getErrorCode() {
+ return errorCode;
+ }
+
+ public void setErrorCode(int errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ public int getStateCode() {
+ return stateCode;
+ }
+
+ public void setStateCode(int stateCode) {
+ this.stateCode = stateCode;
+ }
+}
--- /dev/null
+/**
+ * Copyright (c) 2010-2022 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.fronius.internal.api;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * The {@link OhmpilotRealtimeDetails} is responsible for storing
+ * the "body" node of the JSON response
+ *
+ * @author Hannes Spenger - Initial contribution
+ */
+public class OhmpilotRealtimeDetailsDTO {
+ @SerializedName("Hardware")
+ private String hardware;
+ @SerializedName("Manufacturer")
+ private String manufacturer;
+ @SerializedName("Model")
+ private String model;
+ @SerializedName("Serial")
+ private String serial;
+ @SerializedName("Software")
+ private String software;
+
+ public String getHardware() {
+ return hardware;
+ }
+
+ public void setHardware(String hardware) {
+ this.hardware = hardware;
+ }
+
+ public String getManufacturer() {
+ return manufacturer;
+ }
+
+ public void setManufacturer(String manufacturer) {
+ this.manufacturer = manufacturer;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getSerial() {
+ return serial;
+ }
+
+ public void setSerial(String serial) {
+ this.serial = serial;
+ }
+
+ public String getSoftware() {
+ return software;
+ }
+
+ public void setSoftware(String software) {
+ this.software = software;
+ }
+}
--- /dev/null
+/**
+ * Copyright (c) 2010-2022 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.fronius.internal.api;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * The {@link OhmpilotRealtimeResponse} is responsible for storing
+ * the response from the GetOhmPilotRealtimeData api
+ *
+ * @author Hannes Spenger - Initial contribution
+ */
+public class OhmpilotRealtimeResponseDTO extends BaseFroniusResponse {
+ @SerializedName("Body")
+ private OhmpilotRealtimeBodyDTO body;
+
+ public OhmpilotRealtimeBodyDTO getBody() {
+ if (body == null) {
+ body = new OhmpilotRealtimeBodyDTO();
+ }
+ return body;
+ }
+
+ public void setBody(OhmpilotRealtimeBodyDTO body) {
+ this.body = body;
+ }
+}
*
* @author Jimmy Tanagra - Initial contribution
* @author Thomas Kordelle - Actually constants should be all upper case.
+ * @author Hannes Spenger - Added getValue for power sum
*/
public class FroniusMeterHandler extends FroniusBaseThingHandler {
return new QuantityType<>(meterRealtimeBodyData.getPowerRealPPhase2(), Units.WATT);
case FroniusBindingConstants.METER_POWER_PHASE_3:
return new QuantityType<>(meterRealtimeBodyData.getPowerRealPPhase3(), Units.WATT);
+ case FroniusBindingConstants.METER_POWER_SUM:
+ return new QuantityType<>(meterRealtimeBodyData.getPowerRealPSum(), Units.WATT);
case FroniusBindingConstants.METER_POWER_FACTOR_PHASE_1:
return meterRealtimeBodyData.getPowerFactorPhase1();
case FroniusBindingConstants.METER_POWER_FACTOR_PHASE_2:
Map<String, String> properties = editProperties();
- properties.put(FroniusBindingConstants.METER_MODEL, meterRealtimeBodyData.getDetails().getModel());
- properties.put(FroniusBindingConstants.METER_SERIAL, meterRealtimeBodyData.getDetails().getSerial());
+ properties.put(Thing.PROPERTY_MODEL_ID, meterRealtimeBodyData.getDetails().getModel());
+ properties.put(Thing.PROPERTY_SERIAL_NUMBER, meterRealtimeBodyData.getDetails().getSerial());
updateProperties(properties);
}
--- /dev/null
+/**
+ * Copyright (c) 2010-2022 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.fronius.internal.handler;
+
+import java.util.Map;
+
+import org.openhab.binding.fronius.internal.FroniusBaseDeviceConfiguration;
+import org.openhab.binding.fronius.internal.FroniusBindingConstants;
+import org.openhab.binding.fronius.internal.FroniusBridgeConfiguration;
+import org.openhab.binding.fronius.internal.api.OhmpilotRealtimeBodyDataDTO;
+import org.openhab.binding.fronius.internal.api.OhmpilotRealtimeResponseDTO;
+import org.openhab.core.library.types.DecimalType;
+import org.openhab.core.library.types.QuantityType;
+import org.openhab.core.library.unit.Units;
+import org.openhab.core.thing.Thing;
+
+/**
+ * The {@link FroniusOhmpilotHandler} is responsible for updating the data, which are
+ * sent to one of the channels.
+ *
+ * @author Hannes Spenger - Initial contribution
+ *
+ */
+public class FroniusOhmpilotHandler extends FroniusBaseThingHandler {
+
+ private OhmpilotRealtimeBodyDataDTO ohmpilotRealtimeBodyData;
+ private FroniusBaseDeviceConfiguration config;
+
+ public FroniusOhmpilotHandler(Thing thing) {
+ super(thing);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Fronius Ohmpilot";
+ }
+
+ @Override
+ public void refresh(FroniusBridgeConfiguration bridgeConfiguration) {
+ updateData(bridgeConfiguration, config);
+ updateChannels();
+ updateProperties();
+ }
+
+ @Override
+ public void initialize() {
+ config = getConfigAs(FroniusBaseDeviceConfiguration.class);
+ super.initialize();
+ }
+
+ /**
+ * Update the channel from the last data retrieved
+ *
+ * @param channelId the id identifying the channel to be updated
+ * @return the last retrieved data
+ */
+ @Override
+ protected Object getValue(String channelId) {
+ if (ohmpilotRealtimeBodyData == null) {
+ return null;
+ }
+
+ final String[] fields = channelId.split("#");
+ if (fields.length < 1) {
+ return null;
+ }
+ final String fieldName = fields[0];
+
+ switch (fieldName) {
+ case FroniusBindingConstants.OHMPILOT_POWER_REAL_SUM:
+ return new QuantityType<>(ohmpilotRealtimeBodyData.getPowerPACSum(), Units.WATT);
+ case FroniusBindingConstants.OHMPILOT_ENERGY_REAL_SUM_CONSUMED:
+ return new QuantityType<>(ohmpilotRealtimeBodyData.getEnergyRealWACSumConsumed(), Units.WATT_HOUR);
+ case FroniusBindingConstants.OHMPILOT_ENERGY_SENSOR_TEMPERATURE_CHANNEL_1:
+ return new QuantityType<>(ohmpilotRealtimeBodyData.getTemperatureChannel1(), Units.KELVIN);
+ case FroniusBindingConstants.OHMPILOT_STATE_CODE:
+ return new DecimalType(ohmpilotRealtimeBodyData.getStateCode());
+ case FroniusBindingConstants.OHMPILOT_ERROR_CODE:
+ return new DecimalType(ohmpilotRealtimeBodyData.getErrorCode());
+
+ default:
+ break;
+ }
+
+ return null;
+ }
+
+ private void updateProperties() {
+ if (ohmpilotRealtimeBodyData == null) {
+ return;
+ }
+
+ Map<String, String> properties = editProperties();
+
+ properties.put(Thing.PROPERTY_MODEL_ID, ohmpilotRealtimeBodyData.getDetails().getModel());
+ properties.put(Thing.PROPERTY_SERIAL_NUMBER, ohmpilotRealtimeBodyData.getDetails().getSerial());
+
+ updateProperties(properties);
+ }
+
+ /**
+ * Get new data
+ */
+ private void updateData(FroniusBridgeConfiguration bridgeConfiguration, FroniusBaseDeviceConfiguration config) {
+ OhmpilotRealtimeResponseDTO ohmpilotRealtimeResponse = getOhmpilotRealtimeData(bridgeConfiguration.hostname,
+ config.deviceId);
+ if (ohmpilotRealtimeResponse == null) {
+ ohmpilotRealtimeBodyData = null;
+ } else {
+ ohmpilotRealtimeBodyData = ohmpilotRealtimeResponse.getBody().getData();
+ }
+ }
+
+ /**
+ * Make the OhmpilotRealtimeData request
+ *
+ * @param ip address of the device
+ * @param deviceId of the device
+ * @return {OhmpilotRealtimeResponse} the object representation of the json response
+ */
+ private OhmpilotRealtimeResponseDTO getOhmpilotRealtimeData(String ip, int deviceId) {
+ String location = FroniusBindingConstants.OHMPILOT_REALTIME_DATA_URL.replace("%IP%",
+ (ip != null ? ip.trim() : ""));
+ location = location.replace("%DEVICEID%", Integer.toString(deviceId));
+ return collectDataFormUrl(OhmpilotRealtimeResponseDTO.class, location);
+ }
+}
thing-type.fronius.meter.channel.powerrealphase1.label = Real Power Phase 1
thing-type.fronius.meter.channel.powerrealphase2.label = Real Power Phase 2
thing-type.fronius.meter.channel.powerrealphase3.label = Real Power Phase 3
+thing-type.fronius.meter.channel.powerrealsum.label = Real Power Sum
thing-type.fronius.meter.channel.voltageacphase1.label = AC Voltage Phase 1
thing-type.fronius.meter.channel.voltageacphase2.label = AC Voltage Phase 2
thing-type.fronius.meter.channel.voltageacphase3.label = AC Voltage Phase 3
+thing-type.fronius.ohmpilot.label = Fronius Ohmpilot
+thing-type.fronius.ohmpilot.description = Fronius Ohmpilot
thing-type.fronius.powerinverter.label = Fronius Symo Inverter
thing-type.fronius.powerinverter.description = Fronius Symo power inverter
thing-type.fronius.powerinverter.channel.powerflowchannelpakku.label = Charge / Discharge of Battery
thing-type.config.fronius.bridge.refreshInterval.description = Specifies the refresh interval in seconds.
thing-type.config.fronius.meter.deviceId.label = Device ID
thing-type.config.fronius.meter.deviceId.description = Specific device identifier
+thing-type.config.fronius.ohmpilot.deviceId.label = Device ID
+thing-type.config.fronius.ohmpilot.deviceId.description = Specific device identifier
thing-type.config.fronius.powerinverter.deviceId.label = Device ID
thing-type.config.fronius.powerinverter.deviceId.description = Specific device identifier
channel-type.fronius.meter_location.description = Meter Location Code
channel-type.fronius.meter_powerfactor.label = Power Factor
channel-type.fronius.meter_powerreal.label = Power
+channel-type.fronius.ohmpilot_energy.label = Real Energy Consumed
+channel-type.fronius.ohmpilot_energy.description = Total consumed energy [Wh]
+channel-type.fronius.ohmpilot_powerreal.label = Real Power Sum
+channel-type.fronius.ohmpilot_powerreal.description = Actual power consumption [W]
+channel-type.fronius.ohmpilot_temperature.label = Temperature
+channel-type.fronius.ohmpilot_temperature.description = Temperature of the PT1000
channel-type.fronius.pAkku.label = Battery Power
channel-type.fronius.pAkku.description = Battery Power ( + discharge, - charge )
channel-type.fronius.pGrid.label = Grid Power
<channel id="powerrealphase3" typeId="meter_powerreal">
<label>Real Power Phase 3</label>
</channel>
+ <channel id="powerrealsum" typeId="meter_powerreal">
+ <label>Real Power Sum</label>
+ </channel>
<channel id="powerfactorphase1" typeId="meter_powerfactor">
<label>Power Factor Phase 1</label>
</channel>
</channel>
</channels>
- <properties>
- <property name="model"/>
- <property name="serial"/>
- </properties>
+ <config-description>
+ <parameter name="deviceId" type="integer">
+ <label>Device ID</label>
+ <description>Specific device identifier</description>
+ <default>0</default>
+ </parameter>
+ </config-description>
+ </thing-type>
+
+ <!-- Ohmpilot Thing Type -->
+ <thing-type id="ohmpilot">
+ <supported-bridge-type-refs>
+ <bridge-type-ref id="bridge"/>
+ </supported-bridge-type-refs>
+ <label>Fronius Ohmpilot</label>
+ <description>Fronius Ohmpilot</description>
+
+ <channels>
+ <channel id="powerrealsum" typeId="ohmpilot_powerreal"/>
+ <channel id="energyrealsumconsumed" typeId="ohmpilot_energy"/>
+ <channel id="temperaturechannel1" typeId="ohmpilot_temperature"/>
+ <channel id="statecode" typeId="devicestatus_statuscode"/>
+ <channel id="errorcode" typeId="devicestatus_errorcode"/>
+ </channels>
<config-description>
<parameter name="deviceId" type="integer">
<channel-type id="meter_ac_current">
<item-type>Number:ElectricCurrent</item-type>
<label>AC Current</label>
- <description></description>
<state pattern="%.2f %unit%" readOnly="true"></state>
</channel-type>
<channel-type id="meter_ac_voltage">
<item-type>Number:ElectricPotential</item-type>
<label>AC Voltage</label>
- <description></description>
<state pattern="%.2f %unit%" readOnly="true"></state>
</channel-type>
<channel-type id="meter_powerreal">
<item-type>Number:Power</item-type>
<label>Power</label>
- <description></description>
<state pattern="%.2f %unit%" readOnly="true"></state>
</channel-type>
<channel-type id="meter_powerfactor">
<item-type>Number</item-type>
<label>Power Factor</label>
- <description></description>
<state pattern="%.2f" readOnly="true"></state>
</channel-type>
<channel-type id="meter_energy">
<item-type>Number:Energy</item-type>
<label>Energy</label>
- <description></description>
<state pattern="%.2f %unit%" readOnly="true"></state>
</channel-type>
+ <channel-type id="ohmpilot_powerreal">
+ <item-type>Number:Power</item-type>
+ <label>Real Power Sum</label>
+ <description>Actual power consumption [W]</description>
+ <state pattern="%.2f %unit%" readOnly="true"></state>
+ </channel-type>
+ <channel-type id="ohmpilot_energy">
+ <item-type>Number:Energy</item-type>
+ <label>Real Energy Consumed</label>
+ <description>Total consumed energy [Wh]</description>
+ <state pattern="%.2f %unit%" readOnly="true"></state>
+ </channel-type>
+ <channel-type id="ohmpilot_temperature">
+ <item-type>Number:Temperature</item-type>
+ <label>Temperature</label>
+ <description>Temperature of the PT1000</description>
+ <state pattern="%.2f %unit%" readOnly="true"></state>
+ </channel-type>
+
+
+
</thing:thing-descriptions>